この記事は UiPath Advent Calendar 2023 の12日目の記事です。 UiPath アドベントカレンダーに参加されている他の皆さんの記事もぜひお楽しみくださいませ。


プロローグ

少し前に、UiPathではPowerPointの操作は癖があり難しい、そもそもよくわからない。という声を聞きました。

私自身、PowerPointは毎日毎日触っていますが、(おそらく、仕事してて一日で最も長く触れているツール orz)自動化したことはなく、なんとなくパワポは自動化しない、できないと決めつけていた気がして、はっとしました。

そうして、UiPathでどこまでPowerPointの操作を自動化できるかを整理しておこうと思った次第であります。

UiPathでPowerPointの操作ってできるの?

さて、本題に入ります。

かなり以前、UiPath StudioXが出始めたころからUiPathにはPowerPoint系のアクティビティパッケージは用意されており、自動化自体はできる状況にありました。 リリースノートを見ると、2020年10月に初回リリースとのことでしたので、古参のアクティビティですね。

https://docs.uipath.com/ja/activities/other/latest/productivity/release-notes-uipath-presentations-activities

用意されているアクティビティ一覧は後述しますが、基本的にはPowerPointから情報を取得するものではなく、PowerPointに対して情報を書き込むアクティビティがメインです。

なので、例えばPowerPointのページタイトル一覧を作るとか、PowerPointの表データを取得してExcelに転記するとか、そういったPowerPointからの情報取得が必要な操作は引き続き難しいです。

一切やれないわけではないですが、標準アクティビティでは対応していないので、ごにょごにょする必要があります。


また、定型ではない形式のレポートを出力することもRPAの特性上難しいです。
つまりは、日次や週次で行っている定型レポート作成や、不定期だが頻度が多い定型フォーマットの資料作成を自動化する、というのがPowerPointの自動化ユースケースとしては近いかなと思います。

PowerPoint操作アクティビティ一覧(UiPath.Presentation.Activities)

アクティビティ一覧は以下になります。
フラットに並べるとわかりにくいので勝手に分類しています。

PowerPoint操作のベースになる部品

パワポの操作をするときに必須となるアクティビティです。

アクティビティ名 アクティビティ英名 ざっくり説明
PowerPoint プレゼンテーションを使用 PowerPointApplicationScope 操作したいPowerPointファイルを指定する親アクティビティ



スライド(ページ)の追加や削除、コピーなどの操作部品

パワポの骨格部分の操作をするアクティビティです。

アクティビティ名 アクティビティ英名 ざっくり説明
新しいスライドを追加 InsertSlide 追加したいページ番号やスライドレイアウトを指定してスライドを追加する
スライドを削除 DeleteSlide ページ番号を指定してスライドを削除する
スライドをコピー/貼り付け CopyPasteSlide スライドをコピーして別の位置に貼り付け



スライド(ページ)内のオブジェクトに対する操作部品

個別ページに対して、テキストや表、画像データ追加などの操作を行う部品です。

アクティビティ名 アクティビティ英名 ざっくり説明
スライドにテキストを追加 InsertTextInPresentation 指定したページ内のオブジェクトにテキストを追加する
スライドにデータ テーブルを追加 ReplaceShapeWithDataTable 指定したページ内のオブジェクトに表形式データを追加する
スライドに画像/ビデオを追加 ReplaceShapeWithMedia 指定したページ内のオブジェクトに画像やビデオデータを追加する
スライドに項目を貼り付け PasteIntoSlide 指定したページ内のオブジェクトに、クリップボードから項目を挿入します。
スライドにファイルを追加 InsertFile ファイルのリンクをスライドへ挿入し、アイコンとして表示
スライド コンテンツを書式設定 FormatSlideContent 指定したページ内のオブジェクトに対し、フォントサイズ、図形名の変更、最前面/最背面の変更などを行う



パワポ全体に対する操作や、保存処理を担う部品

パワポ全体に対して、テキスト置換、マクロ実行、別名ファイルとして保存、PDF化して保存などができる部品です。

アクティビティ名 アクティビティ英名 ざっくり説明
プレゼンテーション内のテキストを置換 FindAndReplaceTextInPresentation パワポ全ページに対して、指定したテキストを別のテキストに置換する
プレゼンテーションのマクロを実行 RunMacro マクロ有効プレゼンテーション内で指定したマクロを実行する
名前をつけて PowerPoint ファイルを保存 SavePresentationFileAs PowerPoint プレゼンテーションを新しいファイルとして保存する
プレゼンテーションを PDF として保存 SavePresentationAsPdf PowerPoint プレゼンテーションを PDF としてエクスポートする

どうでしょうか?使えそうだなーという機能はありましたでしょうか?

個人的には スライドにデータ テーブルを追加 は使えると思いました!

Excelでシミュレーションした表データ(金額とか工数とか)を、提案用とか報告用にパワポに転記するケースが日頃多くて、自動化できると気持ちが明るくなりそうです。

ということでものは試しでやってみましょう。

パワポ操作やってみた

やってみた内容

経費申請レポートという架空のレポートを作成します。

あらかじめ、PowerPointで、以下のテンプレートファイルを用意しておきます。

pic1

出力したい結果のレポートは以下になります。
Excelで、経費一覧データを用意しておき、Excelの表データとピボットグラフを、PowerPointに転記するというのをやります。

pic2


やってみた結果!

pic2

いい感じに動いて、PDF化までしてくれました。


作成したワークフロー

以下にワークフローを載せておきます。
実行すると前述した内容の自動化が実現できました!

pic4

ワークフロー作成のポイント紹介

ポイントをご説明します。

コンテンツプレースホルダーについて

PowerPoint上の特定の箇所(オブジェクト)に、テキストを追加したい要件があるとします。 今回で言うと、1ページ目のタイトルの下の欄に実行日を追記したい。という要件になります。
pic1

パワポのどのページのどの箇所(オブジェクト)にテキストを追加するのかという指定は、「スライドにテキストを追加」アクティビティの「スライド番号」「コンテンツ プレースホルダー」プロパティにて行います。

UiPathでは、PowerPoint上のページ一覧、および各ページのオブジェクト一覧を候補として提示してくれます。 pic4

ですが、通常パワポを操作するうえで、このオブジェクト名を見るシーンってほとんどないと思います。
ほとんどの方が、このオブジェクト名はいったん誰が付けたん?どこから見るん?という状態だと思います。
ご安心ください。以下から確認いただけます!ドヤツ

[ホーム] - [配置] - [オブジェクトの選択と表示] pic4

こんな感じで見れます!

pic4

右側に表示されるオブジェクトパネルで、オブジェクト名の変更ができますので、UiPathから操作したいオブジェクトの名前をわかりやすいものに変更しておくと後々楽です。

表データの転記について

Excelの表データをUiPathで抽出し、PowerPointに転記します。 pic2

まず「Excelファイルを使用」アクティビティと「範囲を読み込み」アクティビティを利用して、DataTable型の変数に書き出します。

そして「スライドにデータ テーブルを追加」アクティビティを使用することで、簡単にDataTable型の変数の値をPowerPointの表として書き出すことができます。
pic6

ポイントはあらかじめPowerPoint側に、表テンプレートを用意しておくことです。そうすることでレイアウト(見た目)が整った状態で出力することができます。

ピボットグラフの転記について

ExcelのピボットグラフデータをUiPathで抽出し、PowerPointに転記します。 pic3

こちらはExcel関連アクティビティに、「グラフを取得」アクティビティというものがあり、事前にExcel側でピボットグラフを用意しておけば、簡単にクリップボード領域にコピーすることができます。 pic3

そして「スライドに項目を貼り付け」アクティビティを使うと、クリップボード領域のデータをスライドに張り付けすることができます。 pic3

以上です!

UiPathを使えば、PowerPointでレポートや報告書を作成する作業の自動化、意外とできますね!

興味を持っていただいた方、PowerPointの操作自動化に是非チャレンジしてみてください✨