請求書PDFの一覧Excel化とリネーム手順
概要
invoices フォルダ内の請求書PDFを読み取り、1請求書=1行のサマリーExcelを作成し、さらに元PDFを YYYY-MM-DD_{請求元会社名}.pdf 形式で別フォルダにコピーする一連の手順。
支払管理・振込作業向けの「一覧表」を作るのが目的。品目明細まで展開する場合は別記事「請求書PDFをExcelにまとめる手順」を参照。
フロー図
前提
- 請求書PDFは接続フォルダ配下の
invoices/にある(例:~/mnt/demo/invoices/)。 - PDFはテキストレイヤーを持つ(スキャン画像の場合はOCRが必要)。
- 各社でレイアウトはバラバラ(縦書き風・英日混在・表形式など)だが、記載項目は共通。
- 作業はユーザーのPC上で
device_bashを使って実行する。ファイルをコンテナへアップロードしない。
手順
1. PDFの一覧化とテキスト抽出
cd $HOME/mnt/demo/invoices
for f in *.pdf; do echo "=== $f"; pdftotext -layout "$f" -; done-layoutを必ず付ける。表組みの列関係が崩れず、単価・金額の対応を読み違えない。- ユーザーPCに
pdftotext/openpyxl/sofficeが入っているか事前にwhichで確認する。
2. 抽出する項目
項目 | 備考 |
|---|---|
発行日 | 「発行日」「ISSUED」「Issued」表記ゆれあり |
支払い期限 | 「お支払期限」「DUE」「支払期限」表記ゆれあり |
請求元 | 請求先(クローバ株式会社)と取り違えないこと |
請求元住所 | 郵便番号+住所+ビル名・階まで |
登録番号 | インボイス制度の適格請求書発行事業者登録番号(T+13桁) |
請求額 | 税込の合計金額。小計(税抜)と混同しない |
振込先 | 銀行名・支店・口座種別・口座番号・口座名義をそのまま転記 |
3. Excelの作成
xlsxスキルをRead して作成ルール(フォント統一、数式使用、ゼロエラー)を確認する。- openpyxl でワークブックを作成:
- 列順は 発行日 / 支払い期限 / 請求元 / 請求元住所 / 登録番号 / 請求額 / 振込先。
- 発行日の昇順でソート(同日は請求元名で安定ソート)。
- 日付は
datetime.dateで書き込み、表示形式yyyy/mm/dd。文字列で入れない。 - 請求額は数値で書き込み、表示形式
#,##0。 - ヘッダーは太字・白文字・濃紺背景(
1F4E79)、freeze_panes="A2"、auto_filterを設定。 - 最終行に合計行を置き、
=SUM(F2:F11)のようにExcel数式で集計する(Python側で計算した値をハードコードしない)。 - 末尾に出典・前提の注記行を入れる。
- 列幅の目安: 発行日/支払期限 12、請求元 32、住所 58、登録番号 18、請求額 14、振込先 52。
4. 数式の再計算と検算
openpyxl が書いた数式にはキャッシュ値が無いため、そのままではプレビューで空欄に見える。LibreOffice で再計算して上書きする。
cd $HOME && mkdir -p recalc && cp mnt/demo/請求書一覧.xlsx recalc/ && cd recalc
soffice --headless --norestore -env:UserInstallation=file://$HOME/lo_profile \
--convert-to xlsx --outdir out 請求書一覧.xlsx
cp out/請求書一覧.xlsx $HOME/mnt/demo/請求書一覧.xlsx-env:UserInstallationを指定しないと、ユーザーが起動中のLibreOfficeとプロファイルが競合して失敗する。- 変換後に
data_only=Trueで読み直し、全行の値と合計が元PDFと一致するか確認する。 - 作業用の
recalc/とlo_profile/は最後に削除する。ユーザーの接続フォルダに一時ファイルを残さない(作業用ファイルは$HOME直下=mnt/の外に置く)。
5. PDFのリネームコピー
cd $HOME/mnt/demo && mkdir -p invoices_renamed
# 抽出済みの発行日と請求元名から {元ファイル名: 新ファイル名} の対応表を作り
# shutil.copy2 で invoices_renamed/ へコピー- ファイル名フォーマットは
YYYY-MM-DD_{請求元会社名}.pdf。 - 元ファイルは残し、コピーで作成する(
device_bashはデフォルトで削除不可のため、移動ではなくコピーが安全)。 - コピー前に元ファイルの存在を
assertで確認し、コピー後に件数と一覧を検証する。 - 会社名はPDF記載どおり(
株式会社/有限会社/合同会社を省略しない)。
6. 報告
- 保存先フォルダ名とファイル名を伝える(接続フォルダに直接書いた成果物はそれ自体が納品なので、チャットへの再送は不要)。
- 件数・合計金額・気づいた点(口座種別が「当座」の1件だけ違う、支払期限が1件だけ翌月、など)を簡潔に添える。
注意点
- 請求額は必ず税込合計。「小計(10%対象)」を拾わないよう、消費税額を足した値と突合する。
- 発行日が同一の請求書が複数ある場合、ファイル名は重複しないが並び順は不定になる。必要なら請求書番号を付与する。
- ユーザーの接続フォルダ内のファイルは
device_bashから削除できない。やり直す場合は上書き保存するか、別名で作成する。 - 成果物のフォントは Arial などのプロフェッショナルフォントで統一する。
最終更新: