Table of Content
またPythonの話題です。
ここで扱うPythonは、Iot、ML、AI、ディープラーニング・・・などではありません。単に便利なスクリプト言語という位置づけです。
ここで取り上げるような内容は、本として出版されています。
退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング
Pythonの環境構築については、本家の以下の記事をご覧ください。
環境構築ガイド - Windows 環境のPython
環境構築ガイド - macOS環境のPython
環境構築ガイド - CentOS 環境のPython
開発環境では、pipもインストールするようにしてください。
今回はopenpyxlライブラリを使用して、ExcelVBAのブック、シート、セルの操作などを、ExcelVBAを使用せずにPythonで行います。
環境構築が終わっていれば、以下のコマンドで、openpyxlライブラリをインストールします。
pip install openpyxl
今回使用するテンプレートは、以下のEXCELファイルによるひな形です。
ひな形に流し込む埋め込みデータはCSVで用意しました。
データの内容は以下のような適当なものです。
Date | Name | Vol | Tani | Suryo1 | SuryoTani | Tanka | Kingaku |
---|---|---|---|---|---|---|---|
2020/04/01 | パセリ | 1 | Kg | 100 | 個 | 12 | 1000 |
2020/04/02 | ブロッコリー | 8 | Kg | 50 | 個 | 17 | 500 |
2020/04/02 | ほうれんそう | 3 | Kg | 100 | 個 | 20 | 1000 |
2020/04/02 | たけのこ(ゆで) | 1 | Kg | 20 | 個 | 16 | 1000 |
2020/04/02 | チンゲンサイ | 2 | Kg | 20 | 個 | 16 | 8000 |
2020/04/04 | ねぎ | 1 | Kg | 100 | 個 | 12 | 1000 |
2020/04/04 | もやし | 2 | Kg | 50 | 個 | 17 | 500 |
2020/04/04 | キャベツ | 4 | Kg | 100 | 個 | 20 | 1000 |
2020/04/04 | こまつな | 3 | Kg | 20 | 個 | 16 | 1000 |
2020/04/04 | だいこん | 1 | Kg | 20 | 個 | 16 | 1000 |
2020/04/04 | ねぎ | 1 | Kg | 100 | 個 | 12 | 1000 |
2020/04/04 | ピーマン | 1 | Kg | 50 | 個 | 17 | 500 |
2020/04/06 | もやし | 2 | Kg | 100 | 個 | 20 | 800 |
最後にPythonのコードです。汚くてすいません。
import pandas as pd
import openpyxl as excel
from datetime import date, datetime
import subprocess
import sys
# 発注書のテンプレート
file_order= "テンプレート.xlsx"
# 生成する発注書
file_order_out = "テンプレートを使って帳票を出力した場合の例.xlsx"
# CSVデータの読み込み
df = pd.read_csv("embed.csv", encoding="shift_jis")
print("CSVデータの行数 = " + str(len(df)))
# CSVデータの行数を取得
csvrow=len(df)
# 出力するページ数を算出
page_total = -(-csvrow // 40)
print("出力するページ数 = " + str(page_total))
# 発注書のテンプレート(ワークブック)を読む
wb = excel.load_workbook(file_order)
# 先頭のシートを選択する
ws = wb.active
# CSVデータの埋め込み
i = 0
for row in df.itertuples(name=None):
ws.cell(column=1,row=i+17).value = row[1]
# 納品日
ws.cell(column=2,row=i+17).value = str(row[2])
# 食品名
ws.cell(column=9,row=i+17).value = row[3]
# 必要量
ws.cell(column=10,row=i+17).value = str(row[4])
# 単位
ws.cell(column=11,row=i+17).value = row[5]
# 数量1
ws.cell(column=12,row=i+17).value = str(row[6])
# 数量2
ws.cell(column=13,row=i+17).value = row[7]
# 単価
ws.cell(column=14,row=i+17).value = row[8]
# 金額
i+=1
# 新しくEXCELブックを保存する
wb.save(file_order_out)
# EXCELを起動
try:
result = subprocess.Popen(['start', file_order_out], shell=True)
except subprocess.CalledProcessError:
print('エクセルファイルが開けませんでした。編集中のエクセルがある場合はすべて終了してから再度お試しください', file=sys.stderr)
Windows環境の場合、EXCELが起動し、以下のような流し込まれた帳票が出力されると思います。
簡単ですが以上です。
コメント