間違えええたくないんですよ
見積書の社名や金額をひたすら手作業で転記する…
そんな単純だけど地味に時間を奪う責任重大な作業はRPAにお任せしようと思います。
今回はPDFの請求書から必要な情報を抽出し、Excelへ自動転記するRPAを作った実例をご紹介します。
1.RPAの概要
利用ツール
Microsoft PowerAutomate Desktop
Excel
完成イメージ
- 見積書(PDF)に記載されている社名や金額を読み取る
- Excelファイルに転記
- 抽出が終わったファイルは別のフォルダに隔離
全体の流れ
- 見積書を特定のフォルダに保存
- RPAを起動
- Excelファイルに抽出した値が転記されていく
- 抽出が終わったファイルは別のフォルダに移動される
2.作り方
事前準備
見積書から抽出したい項目を決めます。
図のようなExcelファイルを作成します。この表にターゲットとした値が転記されていくイメージです。
RPAの作成
RPAのソースコード
(上に空行が必要)
Excel.LaunchExcel.LaunchAndOpenUnderExistingProcess Path: $'''転記用エクセルファイルのパス''' Visible: True ReadOnly: False UseMachineLocale: False Instance=> ExcelInstance
Folder.GetFiles Folder: $'''PDFが保存されているフォルダのパス''' FileFilter: $'''*''' IncludeSubfolders: False FailOnAccessDenied: True SortBy1: Folder.SortBy.NoSort SortDescending1: False SortBy2: Folder.SortBy.NoSort SortDescending2: False SortBy3: Folder.SortBy.NoSort SortDescending3: False Files=> Files
LOOP FOREACH CurrentItem IN Files
Pdf.ExtractTextFromPDF.ExtractText PDFFile: CurrentItem DetectLayout: False ExtractedText=> ExtractedPDFText
Text.SplitText.Split Text: ExtractedPDFText StandardDelimiter: Text.StandardDelimiter.NewLine DelimiterTimes: 1 Result=> TextList
Text.Replace Text: TextList[0] TextToFind: $'''%' '%''' IsRegEx: False IgnoreCase: False ReplaceWith: $'''%''%''' ActivateEscapeSequences: False Result=> syorui
Text.Replace Text: TextList[18] TextToFind: $'''%' '%''' IsRegEx: False IgnoreCase: False ReplaceWith: $'''%''%''' ActivateEscapeSequences: False Result=> kingaku
Text.Replace Text: TextList[14] TextToFind: $'''%' '%''' IsRegEx: False IgnoreCase: False ReplaceWith: $'''%''%''' ActivateEscapeSequences: False Result=> namae
Text.CropText.CropTextAfterFlag Text: kingaku FromFlag: $'''¥''' IgnoreCase: False CroppedText=> 金額 IsFlagFound=> IsFlagFound
Excel.GetFirstFreeColumnRow Instance: ExcelInstance FirstFreeColumn=> FirstFreeColumn FirstFreeRow=> FirstFreeRow
Excel.WriteToExcel.WriteCell Instance: ExcelInstance Value: syorui Column: $'''B''' Row: FirstFreeRow
Excel.WriteToExcel.WriteCell Instance: ExcelInstance Value: 金額 Column: $'''C''' Row: FirstFreeRow
Excel.WriteToExcel.WriteCell Instance: ExcelInstance Value: namae Column: $'''A''' Row: FirstFreeRow
END
Excel.SaveExcel.Save Instance: ExcelInstance
Excel.CloseExcel.Close Instance: ExcelInstance
File.Move Files: Files Destination: $'''抽出が終わったPDFファイルの避難先のパス''' IfFileExists: File.IfExists.DoNothing MovedFiles=> MovedFiles
今回は抽出したい見積書を入れるフォルダを「見積書」
抽出した値を転記するExcelファイルを「test」
抽出が終わったファイルを保存するフォルダを「完了」としています。
1.転記するExcelファイルの起動、PDFファイルを読み込む
2-1.PDFの文章を行ごとに区切り、抽出したい文字列を指定
「ExtractedPDFText」にPDFのテキストが格納されているのでExcelで使用できるように分割していきます。分割した後「TextList」に格納されます。
2-2. 転記先のExcelファイルの空欄に値を書き込む
2-3.Excelファイルを保存して閉じ、抽出が完了したファイルを別フォルダに移動
3.完成
PDFファイルの〇行目の値をExcelファイルに転記する動きのため取引先毎に設定を行う必要がありますけど一応完成です。
あとは転記されたExcelファイルを基に社内の申請書類に利用できるかなと思います。
4.実際に使ってもらった
「時間を奪う転記作業と偉い人たちに見られる申請書作成の負担軽減になりますか」と事務担当の人にRPAを動かしながら聞いたところ
こんな感じの感想をもらいました。
- すべての取引先に対応できればいいのに
- 申請書への転記もやってほしい
- 手作業が減るのはありがたい
使えなくはないが、伸びしろはまだまだあるとのご意見をいただきました。
様々な形式の書類に対応して抽出ができるようになること
PDFからの抽出だけでなく申請書類の作成まで自動化できるようにすることが課題になります。
あとがき
抽出方法については正規表現ってヤツを利用することで柔軟にPDFファイル内のテキスト検索ができるようなのですが、正規表現が難しく断念
申請書類作成は運用面でカバーしています。申請書類のひな型がWordを利用していることが多いのでWordの「差し込み印刷機能」を使うことで効率化を図っています。
ここまで読んでいただきありがとうございました。