PADを使って請求書PDFから請求金額だけを抜く
PDFの請求書ってどこにでもありますよね。うちの部署では正直溢れんばかりのPDF請求書というのはないのですが、本タイトルにしたような事が出来れば、何かDXしてるなという感じで尚且つ便利ですよね。
これを作って当部署の人に、「すげー!」と言ってもらう為だけに作りました。基本はPDAというノンコードツールを使うので簡単ではあったのですが、仕組みを理解しない動かないので、それも踏まえて説明します。
完成したものがこちら
取組んだフロー
1.請求書が入ったフォルダから該当取引先だけを別フォルダに移動
2.別フォルダに入ったPDFファイルを1枚づつ読み込む
3.合計金額が入った"行"を抽出
4.3から今度は"金額"だけを抽出
5.4で抽出した金額を数値型に変換
6.5で変換した数値を空のExcelシートに転記
以上
Power Automate Desktopの設定
新しいフローを作成
画面左上の「新しいフロー」を選んで、新規に作成を行います。
フロー名に自分の覚えやすい名前を記入して「作成」ボタンを教えてください。
1.フォルダー内のファイルを取得
今回は請求書が全て入っている”ダミー請求書”という名のフォルダをデスクトップ上に
作成しました。そのフォルダから該当取引先の請求書だけを別のフォルダに移すという
作業を実施します。
ポイント
請求書PDFは全て"会社名+日付+請求書"という名前で入っています。
ファイルフィルターに今回は"A社"と記入しています。そうする事で、請求書PDF
の中から"A社"という名前が入った請求書を指定します。
ポイント2
全てにおいてアクションをした場合に、青印で囲ったように"変数"というものが生成
されます。説明が難しいですが今回の場合で言えば、指定されたフォルダから指定の
ファイルを抜くという一連の作業を今回で言えば、"Files"という名の変数で定義した
ものと考えてください。
2.ファイルの移動
宛先フォルダに移動先のフォルダを指定します。
今回ファイルを移動するという一連のアクションに対して、"MovedFiles"という変数が
定義されました。これ以降も変数は全て青色で囲っていきます。
ポイント3
今回で言えば、移動するファイルは変数として定義された"Files"になりますが、
それを記入する場合は、"%Files%"というように%で囲む必要があります。これは
Power Automate Desktopを使う上での共通のルールと思ってください。
3.フォルダー内のファイルを取得
移動先フォルダから、PDFファイルを全て抜きます。今回は全てのPDFを全て取得する
ので"*.pdf"としています。そうする事で全てのPDFファイルを取得します。
ポイント4
今回は全てのPDFファイルを抜くので、"*.pdf"としましたが、もしフォルダ内に他の
PDFファイルがある場合は、今回で言えば"A社*.pdf"に設定します。
もし不安があるなら、この時点で実際に動かしてみるのも一手です。予定通りに
動かなければ、何度もファイルフィルターを変えて試してみればいいと思います。
そうする事でファイル名の付け方とかも考えるようになります。
4.Excelの起動
Excelを起動させます。このアクションに対して"Excelinstance"という変数が定義
されました。
5.For each
ループの中から"For each"アクションを移動させ設定します。この作業はこれから
設定する作業を繰り返し実施するアクションです。"CurrentItem"という変数で定義します。
6.PDFからテキストを抽出
まずはPDFファイルから全てのテキストを抽出します。
7.テキストの分割
標準の区切り記号を、"新しい行"に設定します。"TextList"という変数が定義されました。
8.テキストの分割
ここが最大のポイントです。
7.の作業で請求書PDFの全ての行がテキスト化されました。今回はそこから合計費用が記載
された11行目だけを抽出します。よって分類するテキストに"%TextList[11]%"と入力します。
"TextList2"という変数が定義されました。
9.テキストを置換する
8.の作業で合計費用¥○○という行を抽出したので、今度はその行から金額だけを抽出します。
検索するテキストに"合計費用"と入力し、置換先のテキストに"%''%"と入力します。
9.テキストを置換する
8.で抽出した金額から今度は、¥を抽出します。
10.テキストを数値に変換
請求書PDFから全ての行を抽出し、その中から1行だけを抽出し、更にその行から金額だけを
抽出してきました。しかし抽出した金額は数字だけなのですが文字列になっています。
それを数値に変換します。
11.Excelワークシートから最初の空の列や行を取得
4.の作業で変数として定義化された"%ExcelInstance%"をExcelインスタンスに入力します。
行と列で2つの変数が定義されました。
12.Excelワークシートに書き込む
書き込む値のところに10.の作業で定義された変数"%TextAsNumber%"を入力します。
以上6~12までの作業をFor eachの間に入れます。最初のフロー画像を確認して下さい。
以上で設定は完了です。お疲れ様でした。
最後に
途中で何度も実際に動かしてみて確認してみて下さい。
途中で躓いたらChatGPTに聞いてみて下さい。24時間いつでも回答してくれます。
(私はそうしました。)
実際、同僚に見てもらった感想を最後に記載して終わります。
アシスタントA: すげー!!!
アシスタントB: 何が起きているのかさっぱりわからない。なぜこんな事が出来る??
同僚C: すげーけど、うちの部署そんなに困るほど請求書が山のように来ないけどな。
私: 「はい、おっしゃる通り・・・・」
アシスタントの驚きはこちらの期待していた通りでした。
請求書PDFでも紙の請求書を写真で撮って、それをPDF化した場合には読み込みません
でした。逆にそれでも読み取る方法があるなら教えてほしいです。