新しくなったExcelアクティビティを使ってみた

#はじめに
モダンデザインが登場したのが、v2020.10ですので1年以上経過したことになります。
なんとなく勉強し直すのが面倒くさくて放置していましたが、久しぶりにモダンデザインに変更してみると、なんとExcelアクティビティが大きく変わってました！社内外でも質問されることが増えてきたし、私自身Excelアクティビティは1番よく使うアクティビティなので、勉強しなきゃと思い、ようやく重い腰を上げました。

#つかうもの
今回の検証では以下の環境を使用します。
UiPath Studio 2021.10.4
　- UiPath.Excel.Activities v2.11.4

#モダンデザインとは
モダンデザインとは、これまでのUiPath Studioのデザイン（モダンデザインに対してクラシックと呼ぶ）を一新し、新しいデザイン、アクティビティ、レコーディングなど提供するものです。クラシックとモダンの違いはかなりあるようで、正直、学習コストもそれなりにありそうな感じです。

##始め方
プロジェクト単位でモダンデザインを使う・使わないかを選べます。
プロジェクト設定の全般メニューからスイッチングできます。
![画像8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89445/9f7203f4-dcb5-af83-3e6c-3d66567ee357.png)

##アクティビティの違い
モダンデザインに変更すると、今までない新しいアクティビティが増える一方、これまで表示されたいくつかのアクティビティ（例えば、要素の存在を確認など）が検索できなかったりするので、よく問い合わせをもらいます。これはアクティビティツリーのフィルターがかかっているだけなので、「クラシックアクティビティを表示」にチェックを入れれば、これまで通りクラシックアクティビティを使用することが可能です。
![画像9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89445/cfe8412f-e327-5359-b057-4ea13a18eda8.png)
クラシックアクティビティは非推奨アクティビティとは別物なので、使っちゃいけないわけではないようです。基本、クラシックアクティビティはモダンアクティビティに移行されているようですが、クラシックアクティビティを使い続けたい方は使えばいいと思います（いづれ非推奨カテゴリに入る日が来るかもしれませんが、公式からはアナウンスされていません）。

##UIAutomationの違い
UIAutomationは、何やら大きく変わっているようです。
ちゃんと勉強してからにしたいので、今回は割愛しますが、複数の手段（普通のセレクター、あいまいセレクター、画像）によってUIAutomationを行うみたいです。これによって精度の向上や運用時のセレクター取り直しを防いでくれるようです。
![画像10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89445/8712f4ad-92f4-261b-30b1-26abcbdacef6.png)

#Excelアクティビティ
参考（UiPath公式ドキュメント）

https://docs.uipath.com/activities/lang-ja/docs/studiox-excel

##今まで（クラシック）のExcelアクティビティ
![画像12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89445/fefd4ac3-7110-534e-ca34-3692aa1b5dd8.png)

##新しい（モダン）のExcelアクティビティ
すごい増えてますが、アクティビティの名前からどういったアクティビティなのかは何となく分かりますね。
セルの色を取得など一部クラシックのアクティビティが足りてないですが、業務で必要な大体のアクティビティは網羅されているようです。さらに、モダンの方がより実践で役立つアクティビティが充実している気がします。
どうやらStudioXのアクティビティを本家Studioへフィードバックした感じのようです。なので、操作性に関してはStudioXを触ったことがある方は馴染みやすいと思われます。
![画像2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89445/145c77ec-a894-2de2-a9cd-0054f8c855af.png)

##クラシックアクティビティを使った実装
実際の業務でもよくあるExcelファイルから一覧を読み込み、1行ずつ処理するフローを作ってみます。
![画像3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89445/157775df-e0d4-01b8-87be-ac02eb246c7d.png)
今までの実装では、「Excelアプリケーションスコープ」で読み取るExcelファイルを指定し、中に「範囲を読み取り」を置き、特定シート内のデータをDatatable型で取得します。次に「繰り返し（データテーブルの各行）」でDatatable型変数を1件ずつ処理します。

##モダンアクティビティを使った実装
![modern1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89445/34c84902-6c0b-cdc4-6e3f-0f79fe724c2e.png)
まず、フローの大外を「Excelプロセススコープ」で囲い、その中に「Excelファイルを使用」を配置します。この2つのアクティビティは、クラシックでいう「Excelアプリケーションスコープ」と同じ役割です。

Excelプロセススコープのオプションを変更すると、様々な設定を変更することができます。プロジェクト設定で共通ポリシーを定めておけば、いちいちExcelプロセススコープ毎で設定をする必要はなく、設定漏れを防げるので品質は上がるかと思います。
![画像4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89445/69142227-a013-e23f-cca7-3f119abfda70.png)

https://docs.uipath.com/activities/lang-ja/docs/project-settings-excel

次に「Excelファイルを使用」の中に「繰り返し（Excelの各行）」を置くことで１件ずつ処理できます。
繰り返しの対象範囲を指定する際、「＋」のマークから[Excel]を選択することで楽に範囲選択が可能です。
![画像5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89445/acea1973-c811-7b9f-e88a-acba5b214936.png)

また、以下のように読み取った列名が入力補完されるので、実装はかなり楽になるかと思います。
![画像6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89445/3325adea-4a60-e61e-dfcc-2aba28914436.png)

今回の例は、Datatable型変数を使わず実装した分、クラシックよりもシンプルになりましたが、読み取ったExcelデータはExcelプロセススコープ内でしか使えません。データを繰り返して使いたい場合もあるかと思うので、その場合は、「繰り返し（Excelの各行）」の代わりに今まで通りに「範囲を読み込み」を使ってDatatable型変数に取り込んだ方がいいです。
![画像7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89445/f59d2e85-cf1d-0137-0d37-4643154b0fe7.png)

最後に細かいのですが、クラシックでは「Excelアプリケーションスコープ」の出力「ブック」に変数を指定すると、スコープ外でもExcelプロセスを保持したまま（Excelブックを開いたまま）にでき、任意のタイミングでブックを閉じることができました。ブックの競合を防ぐために敢えてこのような実装をすることもありました。
一方、モダンではできそうにありません。スコープを出るとExcelプロセスは消滅するので、ブックを開いている間のすべての処理はExcelプロセススコープ内に書くことになりそうです。階層が深くなり可読性が下がるかもしれないので、実装するときは意識したいところです。
![画像13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89445/7ec16954-d2c4-d333-9af8-9c7c3d50a43d.png)

##2つのExcelプロセススコープ
モダンのExcelプロセススコープは「Excelプロセススコープ」と「単一のExcelプロセススコープ」の2つあります。クラシックでは、「Excelアプリケーションスコープ」の1つしかなかったので、モダンではどちらのプロセススコープを使用するか迷うかもしれません。
![Excelプロセススコープ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89445/1b4d09b8-e68d-9b90-bf7e-62bed65e945e.png)

###Excelプロセススコープ
機能的にはクラシックの「Excelアプリケーションスコープ」に相当するものみたいです。Excelウィンドウの可視、ファイル競合時のアクション、既存プロセスがあった場合のアクションなど、クラシックより細かく状況を設定できます。
「Excelファイルを使用」を抜けるとExcelブックが閉じられ（この時点ではExcelプロセスは生きたまま）、「Excelプロセススコープ」を抜けるとExcelプロセスがキルされる仕様のようです。

###単一のExcelプロセススコープ
起動できるExcelプロセスが1つとする制約があるようです。なので、ワークフロー実行時、既にExcelプロセスが立ち上がっている場合（Excelブックを開いている場合）、アラートのポップアップが出ます（ポップアップが出るということはAttendedで使用するアクティビティですね）。プロセスの多重起動をせず処理するので、PCのリソース的には「Excelプロセススコープ」より軽くなるはずです。「Excelプロセススコープ」のようなオプションの設定はできません。
![画像11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89445/c4a321b0-2f90-7a9a-99c6-3b20cead4bb9.png)


#さいごに
今まで面倒くさくて避けていましたが、いざモダンデザインに変更してみると、Excelアクティビティは割と簡単でした。StudioXからのフィードバックのため、今までよりプログラミングの感覚が薄れ、直感的に実装できそうな感じです。
ただ、今までDataTableやDataRow型の変数を駆使してプログラミングに近いことをやってた方は、慣れるのに多少時間がかかるかもしれません（今まで使っていた.NETの式がそのまま使えないこともあります）。
※Excelアクティビティ以外のモダンデザインも至急キャッチアップしようと思いました