Power Automate DesktopでPDF請求書から金額だけを抜く

**PADを使って請求書PDFから請求金額だけを抜く**
-
PDFの請求書ってどこにでもありますよね。うちの部署では正直溢れんばかりのPDF請求書というのはないのですが、本タイトルにしたような事が出来れば、何かDXしてるなという感じで尚且つ便利ですよね。
これを作って当部署の人に、「すげー！」と言ってもらう為だけに作りました。基本はPDAというノンコードツールを使うので簡単ではあったのですが、仕組みを理解しない動かないので、それも踏まえて説明します。

**完成したものがこちら**
-
![ezgif.com-optimize.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3484232/1cfd478b-42e4-0df0-dcc9-1184a4acdb6f.gif)

**取組んだフロー**
1.請求書が入ったフォルダから該当取引先だけを別フォルダに移動
2.別フォルダに入ったPDFファイルを１枚づつ読み込む
3.合計金額が入った"行"を抽出
4.３から今度は"金額"だけを抽出
5.４で抽出した金額を数値型に変換
6.５で変換した数値を空のExcelシートに転記
以上

**画面フローはこうなります。**
![繧ｹ繧ｯ繝ｪ繝ｼ繝ｳ繧ｷ繝ｧ繝・ヨ (18)-min.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3484232/c0e358f2-7c4a-8e16-4f23-4422bf71f929.png)
![郢ｧ・ｹ郢ｧ・ｯ郢晢ｽｪ郢晢ｽｼ郢晢ｽｳ郢ｧ・ｷ郢晢ｽｧ郢昴・繝ｨ (19)-min.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3484232/4f621d9d-3888-2689-2552-c07ef789e0b2.png)

**Power Automate Desktopの設定**
-
**新しいフローを作成**
画面左上の「新しいフロー」を選んで、新規に作成を行います。
![WS000012.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3484232/cc098b3c-d4a5-a194-42a3-b7f984910a77.jpeg)
フロー名に自分の覚えやすい名前を記入して「作成」ボタンを教えてください。
![WS000013.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3484232/6b54408e-0c8f-f7a8-ebf6-78ed2f2008d7.jpeg)
**1.フォルダー内のファイルを取得**
今回は請求書が全て入っている”ダミー請求書”という名のフォルダをデスクトップ上に
作成しました。そのフォルダから該当取引先の請求書だけを別のフォルダに移すという
作業を実施します。
![繧ｹ繧ｯ繝ｪ繝ｼ繝ｳ繧ｷ繝ｧ繝・ヨ (20)-min.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3484232/00955df3-ce61-6363-3a7d-1f5f486d5401.png)

:::note info
**ポイント**
請求書PDFは全て"会社名＋日付＋請求書"という名前で入っています。
ファイルフィルターに今回は"*A社*"と記入しています。そうする事で、請求書PDF
の中から"A社"という名前が入った請求書を指定します。
:::

:::note info
**ポイント2**
全てにおいてアクションをした場合に、青印で囲ったように"変数"というものが生成
されます。説明が難しいですが今回の場合で言えば、指定されたフォルダから指定の
ファイルを抜くという一連の作業を今回で言えば、"Files"という名の変数で定義した
ものと考えてください。
:::
**2.ファイルの移動**
宛先フォルダに移動先のフォルダを指定します。
今回ファイルを移動するという一連のアクションに対して、"MovedFiles"という変数が
定義されました。これ以降も変数は全て青色で囲っていきます。
![繧ｹ繧ｯ繝ｪ繝ｼ繝ｳ繧ｷ繝ｧ繝・ヨ (21)-min.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3484232/5b9eaf06-a7b3-a0d2-2132-477767004965.png)

:::note info
**ポイント3**
今回で言えば、移動するファイルは変数として定義された"Files"になりますが、
それを記入する場合は、"%Files%"というように％で囲む必要があります。これは
Power Automate Desktopを使う上での共通のルールと思ってください。
:::
**3.フォルダー内のファイルを取得**
移動先フォルダから、PDFファイルを全て抜きます。今回は全てのPDFを全て取得する
ので"*.pdf"としています。そうする事で全てのPDFファイルを取得します。
![繧ｹ繧ｯ繝ｪ繝ｼ繝ｳ繧ｷ繝ｧ繝・ヨ (22)-min.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3484232/e4d2c680-195d-0c03-8437-f8705696224e.png)

:::note info
**ポイント4**
今回は全てのPDFファイルを抜くので、"*.pdf"としましたが、もしフォルダ内に他の
PDFファイルがある場合は、今回で言えば"A社＊.pdf"に設定します。
もし不安があるなら、この時点で実際に動かしてみるのも一手です。予定通りに
動かなければ、何度もファイルフィルターを変えて試してみればいいと思います。
そうする事でファイル名の付け方とかも考えるようになります。
:::
**4.Excelの起動**
Excelを起動させます。このアクションに対して"Excelinstance"という変数が定義
されました。
![繧ｹ繧ｯ繝ｪ繝ｼ繝ｳ繧ｷ繝ｧ繝・ヨ (23)-min.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3484232/1c37d0ab-66e5-21cb-5cce-b81449d1f312.png)
**5.For each**
ループの中から"For each"アクションを移動させ設定します。この作業はこれから
設定する作業を繰り返し実施するアクションです。"CurrentItem"という変数で定義します。
![繧ｹ繧ｯ繝ｪ繝ｼ繝ｳ繧ｷ繝ｧ繝・ヨ (24)-min.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3484232/5e54bab2-4ba9-9f2f-68d2-f708debf157d.png)
**6.PDFからテキストを抽出**
まずはPDFファイルから全てのテキストを抽出します。
![繧ｹ繧ｯ繝ｪ繝ｼ繝ｳ繧ｷ繝ｧ繝・ヨ (25)-min.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3484232/d592d40b-80ef-dc09-610e-618ac981fd42.png)
**7.テキストの分割**
標準の区切り記号を、"新しい行"に設定します。"TextList"という変数が定義されました。
![繧ｹ繧ｯ繝ｪ繝ｼ繝ｳ繧ｷ繝ｧ繝・ヨ (26)-min.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3484232/acd34cc6-0a33-5fa4-4b1e-44394c8370f9.png)
**8.テキストの分割**
ここが最大のポイントです。
7.の作業で請求書PDFの全ての行がテキスト化されました。今回はそこから合計費用が記載
された11行目だけを抽出します。よって分類するテキストに"%TextList[11]%"と入力します。
"TextList2"という変数が定義されました。
![繧ｹ繧ｯ繝ｪ繝ｼ繝ｳ繧ｷ繝ｧ繝・ヨ (27)-min.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3484232/32d0d31e-eae5-d577-f8bd-9c874b52c6c2.png)
**9.テキストを置換する**
8.の作業で合計費用¥○○という行を抽出したので、今度はその行から金額だけを抽出します。
検索するテキストに"合計費用"と入力し、置換先のテキストに"%''%"と入力します。
![繧ｹ繧ｯ繝ｪ繝ｼ繝ｳ繧ｷ繝ｧ繝・ヨ (28)-min.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3484232/d84b7a56-effe-9f00-7381-890dba47adb5.png)
**9.テキストを置換する**
8.で抽出した金額から今度は、¥を抽出します。
![繧ｹ繧ｯ繝ｪ繝ｼ繝ｳ繧ｷ繝ｧ繝・ヨ (29)-min.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3484232/e03f2ee1-ff85-45a9-0f7e-b0a61021edbc.png)
**10.テキストを数値に変換**
請求書PDFから全ての行を抽出し、その中から1行だけを抽出し、更にその行から金額だけを
抽出してきました。しかし抽出した金額は数字だけなのですが文字列になっています。
それを数値に変換します。
![繧ｹ繧ｯ繝ｪ繝ｼ繝ｳ繧ｷ繝ｧ繝・ヨ (30)-min.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3484232/d819021b-d984-7429-a3ee-633a2ea06ac5.png)
**11.Excelワークシートから最初の空の列や行を取得**
4.の作業で変数として定義化された"%ExcelInstance%"をExcelインスタンスに入力します。
行と列で2つの変数が定義されました。
![繧ｹ繧ｯ繝ｪ繝ｼ繝ｳ繧ｷ繝ｧ繝・ヨ (31)-min.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3484232/71ca715e-4d5a-c8ff-4e92-0e017ad62a4d.png)
**12.Excelワークシートに書き込む**
書き込む値のところに10.の作業で定義された変数"%TextAsNumber%"を入力します。
![繧ｹ繧ｯ繝ｪ繝ｼ繝ｳ繧ｷ繝ｧ繝・ヨ (32)-min.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3484232/e7123fc4-076f-fc39-bbe6-22b59e85e35a.png)
以上6~12までの作業をFor eachの間に入れます。最初のフロー画像を確認して下さい。
以上で設定は完了です。お疲れ様でした。

**最後に**
-
途中で何度も実際に動かしてみて確認してみて下さい。
途中で躓いたらChatGPTに聞いてみて下さい。24時間いつでも回答してくれます。
（私はそうしました。）
実際、同僚に見てもらった感想を最後に記載して終わります。
アシスタントA：　すげー！！！
アシスタントB：　何が起きているのかさっぱりわからない。なぜこんな事が出来る？？
同僚C：　　　　　すげーけど、うちの部署そんなに困るほど請求書が山のように来ないけどな。
私：　　　　　　「はい、おっしゃる通り・・・・」
アシスタントの驚きはこちらの期待していた通りでした。

:::note warn
請求書PDFでも紙の請求書を写真で撮って、それをPDF化した場合には読み込みません
でした。逆にそれでも読み取る方法があるなら教えてほしいです。
:::