RPA(ロボティック プロセス オートメーション)にまつわる国内外の最新情報をお伝えすると共に、自動化推進に役立つ話題や社内の導入事例などについてご紹介します。

PowerPointの特定のテキストボックスからテキストを取得する方法

RPAエンジニア 大庭

PowerPointのスライドにあるテキストを抜き出したいとき、手動で行う場合はそのテキストボックス内のテキストを選択し、コピーする作業を繰り返し行う必要があって大変ですが、UiPathを使って自動化することができます。今回は、この作業をUiPathで行う場合の方法をご紹介します。

準備として、PowerPointのテキストボックスの名前を確認します。

  1. PowerPointのウィンドウ上部にあるリボンの「ホーム」タブの「図形描画」グループにある「配置」をクリックし、表示されたリスト内の「オブジェクトの選択と表示」をクリックします。または、リボンの「ホーム」タブの「編集」グループにある「選択」をクリックし、表示されたリスト内の「オブジェクトの選択と表示」をクリックします。実行すると、ウィンドウ右側に「選択」ウィンドウが表示され、ここでスライドごとに含まれているオブジェクトの名前が確認できます。

  2. 「選択」ウィンドウが表示された状態で、中央の「スライド」ウィンドウ内の目的のテキストボックスをクリックすると、「選択」ウィンドウの該当するテキストボックスの名前が選択された状態になるので、名前を確認できます。また、名前をクリックすると変更できる状態になるので、テキストボックスの名前を変更することもできます。

ここからはUiPathでのロボットのフローを説明します。

  1. 予め確認した複数のテキストボックスの名前を配列型変数などに格納しておきます。

  2. 繰り返し(コレクションの各要素)(UiPath.Core.Activities.ForEach)アクティビティを使い、1.の配列型変数をコレクションに指定します。

  3. For Each(繰り返し(コレクションの各要素))アクティビティのスコープ内でフルテキストを取得(UiPath.Core.Activities.GetFullText)アクティビティを使います。そのセレクターを「スライド」ウィンドウのテキストボックスの要素の動的セレクターにします。具体的には、セレクターの「name」属性の部分をFor Each(繰り返し(コレクションの各要素))アクティビティのitem変数で置き換えます。注意点として、UI Explorerを開いて親要素である「スライド」ウィンドウのセレクターを追加しておく必要があります。こうすることで、UiPathが「選択」ウィンドウ内のテキストボックスの要素ではなく「スライド」ウィンドウ内のテキストが含まれるテキストボックスを指定の要素として認識します。また、出力に適当な変数を指定します。

  4. 3.で出力した変数を1行を書き込み(System.Activities.Statements.WriteLine)アクティビティで出力し、テキストボックス内のテキストが出力されていることを確認します。

参考として、子要素を探す(UiPath.Core.Activities.FindChildren)アクティビティを使うことで、「選択」ウィンドウからテキストボックスの名前を取得する処理も自動で行うことができます。その場合、取得した子要素のコレクションをFor Each(繰り返し(コレクションの各要素))アクティビティで指定し、そのスコープの中で属性を取得(UiPath.Core.Activities.GetAttribute)アクティビティを使い、要素の「name」属性、つまりテキストボックスの名前を取得します。後は上記と同じように、その名前をGetFullText(フルテキストを取得)アクティビティで「スライド」ウィンドウのテキストボックスの要素の動的セレクターに代入します。

この方法で、UiPathでPowerPointのファイルを扱うロボットを開発してみていただければ幸いです。

ロボットの実行ログとして残したい情報

RPAエンジニア 小林

ロボットを扱っていて思ったように動作しないとき、どのように動いたか、どこまで処理が進んだのかという動作の道筋を見たいときがあります。UiPathでロボットを実行した場合、自動でログファイルに情報が書き出されますが、知りたい情報によっては自分で別のファイルに書き出すほうが便利です。今回は自分用(あるいはチーム用)のロボット実行ログを書き出すにあたって、どのような情報を出力したらよいか考えてみます。UiPathを例に話を進めますが、他のRPAでも共通して使える考え方です。

なお、UiPathで通常「ログファイル」と言えばUiPath Studioの「ログを開く」ボタンからアクセスできる実行ログを指しますが、以下では「ロボット開発者が動作記録のために成果物とは別に書き出すファイル」を「ログファイル」と呼びます。ログファイルの書き出し形式は開発者が扱いやすい形式で構いませんが、基本的には文字列を追加書き込み(UiPath.Core.Activities.AppendLine)アクティビティを使ってテキストファイルに追記していく方法が便利です。

実行時の状況を再現するための情報

ロボットがどのような環境で何を操作したのかがわかると後で状況が再現しやすくなります。また、過去に正常に動作したときの記録があれば、エラーが起きてしまっても設定を見比べて手がかりを得ることができます。具体的には、以下のような情報を残しておくと良いでしょう。

Workflow Inspectorを使ってみよう

RPAエンジニア 大庭

先日、UiPathコーディング規約とワークフロー品質評価キットがUiPathの公式サイトで公開されました。そのワークフロー品質評価キットの中に、UiPath Go!のサイトからダウンロードできるWorkflow Inspectorがあります。これは、開発したプロジェクトの品質を自動で検査し、レビューをしてくれるツールです。

Workflow InspectorはUiPath Studioプロジェクトとして提供されていて、このプロジェクトをUiPath Studioで開いて実行し、表示されるウィンドウで評価したいプロジェクトのフォルダを指定すると、その評価レポートがExcelファイルとして出力されます(Microsoft Excelをインストールしている必要があります)。

チェック項目としては、

  • 命名規則違反(デフォルトでは変数及び引数がアッパーキャメルケースかどうかを判定するようです)
  • 複数の同じ表示名(表示名に重複がないかどうか)
  • 未使用の変数(作成した変数の中にワークフローで使用されていないものがあるかどうか)
  • 必要最小限でない変数のスコープ(変数のスコープが適切かどうか)
  • 不必要なシーケンスやフローチャート(空のシーケンスやフローチャートがないか、もしくは1つのアクティビティのみなのにシーケンスやフローチャートで囲っていないか)

などがあり、全部で24項目あります。これらは、ダウンロードしたWorkflow Inspectorの「WorkflowInspector\Config\JP」フォルダ内にある「Checklist.xlsx」で確認や設定ができます。なお、「ワークフローの命名規則」の項目だけはデフォルトでは検査しない設定になっています。

レビューの結果は「WorkflowInspector\Reports」内に保存されます。この結果を見て適宜修正することでより品質の高いワークフローができます。

ロボットを再利用するときやチームで共有するときなどには、ロボットの可読性や保守性、安定性はより一層重要になってきます。今回ご紹介したWorkflow Inspectorを使うことでプロジェクトの品質管理がしやすくなります。そしてチーム全体でUiPathコーディング規約を理解してワークフロー品質評価キットを使うことで、プロジェクトの生産性をより向上させることができるのではないかと思います。

UiPathでカスタムフォームを活用しよう

RPAエンジニア 大庭

RPAロボットを開発する中で、実行の途中でユーザー(今回の場合はロボットを実行している人)から入力を受け付けたい場面があると思います。Input Dialog(入力ダイアログ)アクティビティCustom Input(カスタム入力)アクティビティを使うこともできますが、先日、UiPath.Form.Activitiesパッケージがリリースされ、UiPathのアクティビティでカスタムフォームが作成できるようになりました。

カスタムフォームを作成すれば、ユーザーが入力した複数項目を対話形式で受け取ることができます。これを利用すれば、例えばロボットの実行中に何らかのIDとパスワードが必要なときに、ユーザーからの手入力で設定することがよりシンプルにできるようになったり、ほかにも、ユーザーが予めカスタムフォーム内で設定した内容でロボット内の複数の条件分岐の方向を指定すれば、その時の場面に応じたロボットのフローを実行できます。具体的にはデバッグ作業にも応用できると思います。

UiPath.Form.Activitiesパッケージをインストールすると、Create Form(フォームを作成)アクティビティが使えるようになります。出力は、アクティビティのプロパティパネルにある「フォームフィールドコレクション」でフォームに入力された情報を一つずつ変数に格納したり、「フォームフィールド出力データ」でJSON形式のデータ(String型)で一度に受け取ることができます。後者の場合は、UiPath.Web.ActivitiesパッケージをインストールすればDeserialize JSON(JSONをデシリアライズ)アクティビティを使ってJSONオブジェクトにできます。

これからはCreate Form(フォームを作成)アクティビティを活用してより使いやすいロボットを開発していきたいです。

Uipathで繰り返し処理を途中再開するための工夫

RPAエンジニア 小林

RPAを使った自動化作業では、繰り返し処理を行うことがよくあります。同じ作業を何度もするのはRPAの得意領域ですが、時には途中で想定外のパターンが生じてしまいロボットが止まってしまうということもあります。小規模の作業ならまだしも、時間のかかる作業を再度初めから動かすのはなるべく避けたいものです。ロボットが止まらない設計も大事ですが、万が一止まってしまっても途中再開がしやすい設計にすることで効率的に作業を進められます。今回は、UiPathでループを途中再開するための工夫を紹介します。

扱う例

Excelファイルに書かれたデータを使って、行ごとに同じ作業を繰り返す場合を考えます。例えば、商品情報が書かれたExcelファイルから各情報を拾い、CMSに入力して商品ページを作るという作業があります。今回扱う例は、Excelファイルの1行目には商品名や価格などの項目名が、2行目から100行目までは各商品の情報が書かれているものとします。

繰り返し処理で扱うExcelファイルの例

処理がどこまで進んだかログを残す

ロボットを途中再開するために最も重要なのは、処理がどこまで進んだかのログを残すことです。Write Cell(セルに書き込み)アクティビティを使ってExcelファイルに逐次書き込んでもよいですし、Append Line(文字列を追加書き込み)アクティビティを使ってテキストファイルに追記していくのもよいでしょう。どこまで進んだか簡易的に見るだけなら、Write Line(1行を書き込み)アクティビティを使って出力パネルに表示するという方法もありますが、実行の記録を残すという意味ではファイルとして出力したほうが無難です。

UiPath高速化の工夫(フローチャートの構造編)

RPAエンジニア 小林

RPAを用いた業務自動化において、処理にどのくらい時間がかかるかというのはとても重要な点です。 特に、手順が多く処理に時間がかかる場合、「もっと早く処理が終わるといいけど、どのようにロボットを変えたら良いかわからない」ということも多いのではないでしょうか? このBlogでも以前UiPathを高速化するための工夫を紹介しました。 その中でも特に重要なのが、「無駄な処理を行っていないか、手順を見直す」というポイントでした。 今回はさらに一歩踏み込んで、「無駄になり得る処理を効果的に減らす方法」、つまり状況によって必要だったり必要でなかったりする処理を扱うための方法を考えてみます。 UiPathの画面を例として示していますが、フローチャートの構造そのものを扱うのでRPA全般に共通する話でもあります。

UiPathで呼び出し先のロボットからファイルを参照する

RPAエンジニア 小林

ロボットを動作させるとき、Excelファイルやテキストファイルなど、何らかの外部ファイルを参照するシーンがよくあります。 UiPathで外部ファイルを参照するには、適切なアクティビティに適切なファイルパスを渡せばよいのですが、Invoke Workflow File(ワークフローファイルを呼び出し)アクティビティで呼び出されたアクティビティからファイルを参照する際にはパスの扱いに注意が必要な点があります。 今回は、UiPathで呼び出し先のロボットからファイルを参照する方法について考えてみます。

ロボットから外部ファイルを参照するとき、ファイルが置かれている場所をフルパスで考えたほうがわかりやすい場合と、ロボットから見た相対的な位置(相対パス)で考えたほうがわかりやすい場合があります。 例えば、共有フォルダにあるExcelファイルをロボットで編集するなどの場合は、参照したいファイルの置き場所をフルパスで記述してロボットに参照させることが多いと思います。 一方で、ロボットを動作させる上で一時ファイルを書き出したり、スクリプトを実行したりするということもあります。 このようなロボットの一部とも言えるファイルは、ロボットから見た相対パスで参照する場所を考えたほうが都合がよいことが多いです。

スクリプトなどロボットの動作を補助するファイルを含んだプロジェクトの場合、参照するファイルの場所は相対パスで考えたほうがわかりやすい