見出し画像

ChatGPTに請求書作成を自動作成するpythonコードを書いてもらった(実際のコードあり)

請求書の作成について、どこまで簡略化できるのか試してみました。

昔から請求書を作成するのが億劫で、可能な限り工数を削減したいというのがモチベーションになっています。

今までは以下のような流れで作業をしていました。
①エクスプローラーから請求書の雛形Excelを探す
②雛形Excelをコピーする
③雛形Excelを開く 
④雛形Excelに会社名、内容、個数、単価、請求日のセルを入力
⑤ctrl + PでPDFに出力
⑥出力されたPDFのファイル名を変更する(日付、会社名を変更)
⑦間違いがないか確認する

ChatGPTとpythonを駆使して作った流れがこちら
①コマンドプロンプトを開く
②指定のメモ帳を開くコマンドを入力(コマンドは単語帳に登録し、すぐ呼び出せるようにしておく)
②開いたメモ帳で日付、内容、金額、を入力し、保存する
③コマンドプロンプトで指定のpythonスクリプトを実行して、Excelを更新し、同時にPDFを作成する(コマンドは単語帳に登録しておく)
④間違いがないか確認する

最初はすごく時短になるのでは!?と思って作っていたけど、
蓋を開いてみると、わりと小幅な成果になったのかなと。

具体的に減った作業は以下でした。
・雛形Excelを探して開く→コマンドで一発で開く
・PDF化する作業→pythonで処理
・ファイルの名前を変更する→pythonで処理
削減時間が1分くらいかな。。

削減時間よりかは、工数が減って請求書を作る心理的なハードルが下がったのが、一番大きな成果になるのかもしれない。

売上管理にNotionを使っているので、Notionのテーブルビューの情報を引っ張って来て、Excelに直接入力したい!と思って色々試行錯誤してみたけど、自分の力量では難しかったです。
※csvでテキスト情報をエクスポートできるけど、その作業やるなら、メモ帳に手打ちした方が早いと思って諦めました

実際のコード

from openpyxl import load_workbook
from datetime import datetime
import win32com.client as win32

# 更新する値が記載されたテキストファイルのパス
updates_file = r"テキストファイルのパス"

# Excelファイルのパス(ここでfile_pathを定義)
file_path = r"Excelファイルのパス"

# ワークブックを読み込む
wb = load_workbook(filename=file_path)

# 編集するシートを選択
sheet = wb['python用']

# テキストファイルから更新する値を読み込む
updates = {}
with open(updates_file, 'r', encoding='utf-8') as f:
    for line in f:
        key, value = line.strip().split(',')
        updates[key] = value

# 更新するセルの対応を設定
cell_mapping = {
    "会社名": "C6",
    "内容": "C17",
    "個数": "F17",
    "単価": "H17",
    "請求日": "I2",
}

# セルを更新
for key, value in updates.items():
    cell = cell_mapping[key]
    sheet[cell] = int(value) if key in ["個数", "単価"] else value

# 今日の日付をYYMMDD形式で取得
today = datetime.now().strftime("%y%m%d")

# 会社名を変数から取得
company_name = updates["会社名"]

# ファイルを保存する新しいパスをフォーマット
output_base_path = r"新しいパス"
new_file_path = f"{output_base_path}\{today}_00_{company_name}.xlsx"

# ワークブックを保存
wb.save(filename=new_file_path)

# Excelを開始してPDFに変換
excel = win32.gencache.EnsureDispatch('Excel.Application')
excel.Visible = False  # ExcelのGUIを非表示に

try:
    # ワークブックを開く
    wb = excel.Workbooks.Open(new_file_path)
    
    # PDFファイルのパス
    pdf_file_path = new_file_path.replace('.xlsx', '.pdf')
    
    # PDFとしてエクスポート
    wb.ExportAsFixedFormat(0, pdf_file_path)
finally:
    # ワークブックを閉じ、Excelを終了
    wb.Close(False)
    excel.Quit()

# 終了メッセージ
print(f"Excelファイルが保存されました: {new_file_path}")
print(f"PDFが保存されました: {pdf_file_path}")

この記事が気に入ったらサポートをしてみませんか?