Power Automate for desktop

[Power Automate Desktop]指定したフォルダ内のWordファイルをPDFに一括変換するフロー

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

スクリプトの処理内容は下記の通りで、いたってシンプルなものです。

  1. Wordを起動して指定したファイルを開きます。
  2. DocumentオブジェクトのExportAsFixedFormatメソッドを使って文書をPDFとして出力します。
  3. 開いたファイルを保存せずに閉じます。
  4. 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ファイルに変換できるようになりました。

関連記事

[Power Automate Desktop]PDFで指定したキーワードが含まれているページのみを印刷するフロー前のページ

Microsoft Edgeのバージョンに合わせてWebDriverをダウンロードするVBAマクロ次のページ

関連記事

  1. Office関連

    Gmail APIを使ってメール送信するVBAマクロ

    「「Gmail API」β版公開、連動アプリ開発を支援」にもあるように…

  2. Office関連

    [VBA]ユーザーフォームでBootstrapを使う。

    MSDNフォーラムにあった質問「VBAでのフォーム オブジェクトを立体…

  3. Office関連

    新しくなったMZ-Tools

    みなさんは「MZ-Tools」というツールをご存知でしょうか?…

コメント

  • コメント (0)

  • トラックバックは利用できません。

  1. この記事へのコメントはありません。

Time limit is exhausted. Please reload CAPTCHA.

※本ページはプロモーションが含まれています。

Translate

最近の記事

アーカイブ

PAGE TOP