ExcelVBAのテンプレートをやめてPythonのopenpyxlライブラリに移行する方法

Pythonopenpyxl
Python
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で用意しました。

埋め込みデータCSVファイルのダウンロード

データの内容は以下のような適当なものです。

DateNameVolTaniSuryo1SuryoTaniTankaKingaku
2020/04/01パセリ1Kg100121000
2020/04/02ブロッコリー8Kg5017500
2020/04/02ほうれんそう3Kg100201000
2020/04/02たけのこ(ゆで)1Kg20161000
2020/04/02チンゲンサイ2Kg20168000
2020/04/04ねぎ1Kg100121000
2020/04/04もやし2Kg5017500
2020/04/04キャベツ4Kg100201000
2020/04/04こまつな3Kg20161000
2020/04/04だいこん1Kg20161000
2020/04/04ねぎ1Kg100121000
2020/04/04ピーマン1Kg5017500
2020/04/06もやし2Kg10020800

最後に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が起動し、以下のような流し込まれた帳票が出力されると思います。

帳票出力ファイル

エクセル埋め込みファイルのダウンロード

簡単ですが以上です。

コメント

タイトルとURLをコピーしました