Power Automate Desktop(PAD)にはExcel関連のアクションはいくつか用意されていますが、他のOfficeアプリケーション関連のアクションは無いため、基本的にはUIオートメーションやマウス・キーボードで操作することになります。
もちろん、それで処理できないことはないのですが、個人的には安定性に欠けるように思います。そこで今回は簡単なスクリプトを組み合わせてWordを操作する一例として、指定したフォルダ内のWordファイルをPDFに一括変換するフローをご紹介します。
フロー全体
# 指定したフォルダ内のWordファイルをPDFに一括変換するフロー Folder.GetFiles Folder: $'''C:\\Test\\Word''' FileFilter: $'''*.doc*''' 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 File.GetPathPart File: CurrentItem RootPath=> RootPath Directory=> Directory FileName=> FileName FileNameWithoutExtension=> FileNameNoExtension Extension=> FileExtension # スクリプト内のExportAsFixedFormatメソッドで指定可能なオプションは適宜変更 System.RunVBScript VBScriptCode: $'''\'VBScript to convert Word document to PDF Option Explicit Const TargetFilePath = \"%CurrentItem%\" Const OutputFilePath = \"%Directory%\\%FileNameNoExtension%.pdf\" Const wdExportFormatPDF = 17 Const wdExportOptimizeForPrint = 0 Const wdExportAllDocument = 0 Const wdExportDocumentContent = 0 Const wdExportCreateWordBookmarks = 2 Const wdDoNotSaveChanges = 0 With CreateObject(\"Word.Application\") .Visible = True With .Documents.Open(TargetFilePath) .ExportAsFixedFormat OutputFilePath, wdExportFormatPDF, False, wdExportOptimizeForPrint, wdExportAllDocument, , , _ wdExportDocumentContent, False, False, wdExportCreateWordBookmarks, True, True, False .Close wdDoNotSaveChanges End With .Quit End With''' ScriptOutput=> VBScriptOutput ScriptError=> ScriptError END
1. フォルダー内のファイルを取得
Wordファイルが保存されているフォルダーを指定します。
「ファイル フィルター」パラメーターで「*.doc*」と指定することでWordファイルのみを取得対象としています。
・フォルダー:C:\Test\Word
・ファイル フィルター:*.doc*
2. For each
For eachループで1ファイルずつ処理します。
3. ファイル パス部分の取得
変換後のPDFを元ファイルと同じ場所に出力するため、必要なフォルダパスや元ファイル名を取得します。
4. VBScript の実行
Word文書をPDFに変換するためのスクリプトを実行します。
コード内に上記フローで取得した元ファイルのパス(%CurrentItem%)と変換後のファイルのパス(%Directory%\%FileNameNoExtension%.pdf)を埋め込んでいます。
実行するVBScript:
'VBScript to convert Word document to PDF Option Explicit Const TargetFilePath = "%CurrentItem%" Const OutputFilePath = "%Directory%\%FileNameNoExtension%.pdf" Const wdExportFormatPDF = 17 Const wdExportOptimizeForPrint = 0 Const wdExportAllDocument = 0 Const wdExportDocumentContent = 0 Const wdExportCreateWordBookmarks = 2 Const wdDoNotSaveChanges = 0 With CreateObject("Word.Application") .Visible = True With .Documents.Open(TargetFilePath) .ExportAsFixedFormat OutputFilePath, wdExportFormatPDF, False, wdExportOptimizeForPrint, wdExportAllDocument, , , _ wdExportDocumentContent, False, False, wdExportCreateWordBookmarks, True, True, False .Close wdDoNotSaveChanges End With .Quit End With
スクリプトの処理内容は下記の通りで、いたってシンプルなものです。
- Wordを起動して指定したファイルを開きます。
- DocumentオブジェクトのExportAsFixedFormatメソッドを使って文書をPDFとして出力します。
- 開いたファイルを保存せずに閉じます。
- Wordを終了します。
下記ページにある通りExportAsFixedFormatメソッドでは様々なオプションが指定できますので、必要に応じて変更します。
実行画面
実行画面は下図の通りです。
上記の通り、短いスクリプトを活用してWordの操作を安定して行えることが確認できました。PADからはVBScriptの他にもPowerShellやPythonスクリプトを実行できますが、Officeアプリケーションを操作する場合は、VBAに書き方が近いVBScriptがコードを書きやすいのではないかと思います。
PDF変換程度であればすべてスクリプトやマクロで書いてしまっても大した負担ではないのですが、フォルダ内のファイル取得やファイルのパス部分の取得といった汎用的な部分をPADに任せることで書くコード量を減らすことができ、将来的にPADにWordファイルの変換アクションが実装されるようなことがあれば、スクリプトで処理を行っている部分をすぐにPADのアクションに差し替えることもできます。
コードを書くのに慣れていない方にしてみれば、スクリプトを組み込むことでフローを作るハードルが高くなってしまいますし、コードが分かる方でないとフローの管理ができなくなってしまうデメリットもあるのですが、処理の安定性が増すメリットは非常に大きいので、Officeアプリケーションを操作するフローの動作が安定しないことでお悩みの方は、一度スクリプトやマクロの連携も考えてみてはいかがでしょうか。
2023/10/14 追記:
Power Automate for desktop バージョン 2.37 でWord Online (Business)コネクタが追加され、「Word 文書を PDF に変換します」アクションによって簡単にWordファイルをPDFファイルに変換できるようになりました。
この記事へのコメントはありません。