7
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

えっ!そんなこともできるの?PDFから文字だけを抽出してみた

Last updated at Posted at 2023-08-02

請求書対応って本当に大変!

皆さんは毎月の請求書対応にどれくらいの時間がかかりますか?
私の部署はひと月の稼働日数を20日(1日8時間勤務)とした場合、およそ 3日間(24時間) は請求書対応をしています。
(請求書到着→自社システム入力→印刷→押印→関係部署同士で確認→の繰り返し~)

もう嫌だと思っても毎月発生するルーティンワークなので無くすことはできません。
それでもやっぱり面倒くさい時間がもったいない!

なんとか楽ができないかと支払システムをポチポチ触っていると、、、ありました。
CSV形式でのデータ読み込みシステム!!

でも請求書はPDFデータか紙で送付されるから、CSVファイルを直接作成するのは難しいなぁ
・・・じゃあExcel に必要なデータを抽出して、CSVファイルを作ったらいいんじゃない!?
ついでにExcelで届いた請求書を一覧化して進捗確認ができれば業務管理もできて一石二鳥♪
ということで、まずはPDFファイルから文字を抽出してみました。

使用ツール

  • Power Automate Desktop
  • PDF

Power Automate Desktopってなんだ?という方はこちらの記事を参考にしてください。

作成したフロー

Power Automate Desktopを使って実際に作成したフローがこちらです。

image.png

PDFはダミーの請求書を作成しました。
今回はテキストのみを抽出してエクセルに転記します。

image.png

フローの実行結果です。
行ごとにPDFのデータが抽出され転記されています。
今回は28行の読み取りでしたが、PDFファイルが変われば読み取り行数も変化します。

image.png

作ってみよう

1.事前準備

image.png
Power Automate Desktopを起動させ、フローの作成を始めるとこちらの画面に遷移します。
行いたいアクションを左の枠から探し、中央の枠へドラッグすることでフローを構築します。

2.PDFからテキストを抽出

image.png
PDFからテキストを抽出するために対象となるPDFを指定します。

ここで作成された変数ExtractedPDFTextをメモしておくと便利です!

3.テキストの分割

image.png
対象となるPDFのテキストデータを行ごとに分割します。

こちら のサイトを参考にしました。

4.変数の設定

image.png
この後の手順で同じ処理を繰り返す"Loop"を行いますが、その事前準備として変数を設定します。
「テキストの分割」で作成された変数TextList.countを加えます。

ここで作成された変数NewVarをメモしておくと便利です!
こちら のサイトを参考にしました。

5.Excelの起動

image.png
データの出力をするために新規エクセルを開きます。

6.Loop

image.png
先ほど作成した変数NewVarを終了値として入力します。
PDFの内容によって取得されるデータ数に違いがあるため、変数を用いて終了値を指定します。

7.Excelのワークシートに書き込む

image.png

PDFから取得したデータをExcelに転記します。

8.Excelを閉じる

image.png
作成したExcelデータを保存するドキュメント形式と保存場所を指定します。

9.フローのソースコード(Robin)

PAD Robin
Pdf.ExtractTextFromPDF.ExtractText PDFFile: $'''C:\\Users\\lordo\\OneDrive\\デスクトップ\\3回目\\A社御中_社宅請求書_請求書_INV-0000000001.pdf''' DetectLayout: False ExtractedText=> ExtractedPDFText
Text.SplitText.Split Text: ExtractedPDFText StandardDelimiter: Text.StandardDelimiter.NewLine DelimiterTimes: 1 Result=> TextList
SET NewVar TO TextList.count
Excel.LaunchExcel.LaunchUnderExistingProcess Visible: True Instance=> ExcelInstance
LOOP LoopIndex FROM 1 TO NewVar STEP 1
    Excel.WriteToExcel.WriteCell Instance: ExcelInstance Value: TextList[LoopIndex - 1] Column: 1 Row: LoopIndex
    Excel.CloseExcel.CloseAndSaveAs Instance: ExcelInstance DocumentFormat: Excel.ExcelFormat.OpenXmlWorkbook DocumentPath: $'''C:\\Users\\lordo\\OneDrive\\デスクトップ\\3回目\\読み取り請求書_保管場所\\test7.xlsx'''

作ったフローを見てもらった&まとめ

実際に作成したフローと結果を同僚に確認してもらいました。
本当は請求書の支払システムに投稿するCSVファイルまで作成したかったのですが、まずはPower Automate Desktop というツールの説明と今後の完成イメージを加えて説明し、ついでにもっとこうなってほしいなという理想もヒアリングしました。

「PDFからExcelに転記できることを知らなかった」「何が起きてるかわからんが機械が動いているのが見えて面白い」というツールに対する意見が最も多かったです。

特に毎月最も請求書の処理に追われている同僚Bさんからは
「請求書の対応という日常過ぎる業務が一部分でも機械化できるということに驚き」とコメントをいただきました。

また上司Aさんからは「テキストデータのすべてを抽出するのではなく、CSV化に必要な個所だけ抜き出してコピペができるシートになると汎用性が高い」「上手くいけば他部署の方にも共有したい」とコメントがありました。

上司Aさんの指摘通り、今回のフローは「PDFデータを文字に変換しただけ」です。
しかし同僚に確認してもらったことで、必要な機能を再確認・再定義できたことがよかったです。
実際にCSVファイル作成に至るまでには追加しなければならない手順が山ほどあると思いますので、修正を加えて実装までこぎつけたいと思います。

7
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?