電算システムの郵便局・コンビニ振替用紙発行のプログラムを作りました。
SQLServerからデータを取り出してpythonでExcelのテンプレートのmacroを起動して出力します。
コンソール画面からの操作です。
データベースの取引テーブルは伝票番号、取引先コード、取引先名、合計金額から構成される伝票のデータです。
Pythonでデータベースからエクセルに
まずはpythonのコードから。
1-2 データベースとエクセルを操作するモジュールをインポートします。
4 サーバーのインスタンスを定数にセットします。
5 ユーザーを定数にセットします。
6 パスワードを定数にセットします。
7 データベース名を定数にセットします。
10 データベースに接続するコネクション文字列をセットされた定数からセットします。
16 データベース接続のメソッドを使ってデータベースに接続します。
18-54 伝票番号をキーにデータを取得してエクセルにセットし、エクセルのmacroを起動して振込用紙を印刷するサブルーチンの定義。
56-61 qが押されるまで入力された伝票番号をもとに振込用紙印刷を行います。
63 データベースのコネクションを切断します。
18 サブルーチンの定義です。引数は伝票番号です。
19 デバッグ用の伝票番号です。コメントアウトしています。
20 カーソルを定義します。
21 カーソルにSQL文をセットします。
22 SQL文をフェッチします。伝票番号はユニークキーなので1件以下のデータが抽出されます。
24-26 該当する伝票番号がなかった場合の表示です。
28 抽出されたデータを定数にセットします。
29 カーソルを閉じます。
30 エクセルを起動します。
31 エクセルのテンプレートファイルを読み込みます。
34 読み込んだワークブックをアクティブにします。
36 ワークシートをアクティブにします。
38 部門をエクセルの指定のセルに設定します(0で固定しています)。
39 取引先コードをエクセルの指定のセルに設定します。
40 取引先名をエクセルの指定のセルに設定します。
41 伝票番号をエクセルの指定のセルに設定します。
42 発行回数をエクセルの指定のセルに設定します(0で固定しています)。
43 振込期日をエクセルの指定のセルに設定します(期日無しを意味する999999で固定しています)。
44-47 収入印紙添付の要否をエクセルの指定のセルに設定します。
48 振込金額をクセルの指定のセルに設定します。
50-51 エクセルのmacroを起動します。
53-54 ワークブックを閉じてエクセルを終了させます。
Excelでバーコードを生成して印刷
Excelのテンプレートはこのようになっています。
pythonでセットされた内容をもとにチェックデジットを計算します。エクセル上でチェックデジットを計算しているのは、Pythonでデータベースからデータを取得するまでは手動で必要項目をセットしていた名残です。あらかじめPythonで計算してセットすればもっとすっきりとしたテンプレートになると思います。
「太枠内を入力した後印刷」というボタンも手動で入力、マクロ起動していた名残です。Pythonからmacroを起動するのでボタンは基本的に使いません。手動で入力、印刷を行うときには使います。
Excelのmacro
Excelのmacroです。
select_printerは現在選択されているプリンターを退避して、プリンター選択ダイアログを表示してプリンターを選択します。振込用紙をセットされているプリンターを選択するためです。
reset_printerは通常選択されているプリンターに出力先を戻すため退避したプリンターを復元します。
CODE128_CはOCXを利用してバーコードを生成します。
選択されたプリンターに印刷処理を行います。
簡単なツールですが結構役に立ってます。
コメント