【UiPath】「セルを読み込み」を理解する【初心者】
UiPathの学習追体験記事です。
※あくまで学習中の脳内を記事にしたものなので、この記事で書かれてあることが”正しい”とは限りません。
参考:学習効率本5巻 「知識の自作」
0.動機

情報をExcelやスプレッドシートにまとめる作業がめんどくさい。どうにか効率よくできないか。
と思っていたところ、UiPathでExcelを操作できると知ったため、とりあえずやってみた。
前回、Excelの基本的な操作「セルに書き込み」アクティビティを理解したので、今回は「セルを読み込み」アクティビティを理解したい。
1.全体像理解
全体像理解とは、理解する項目の位置づけを把握すること。
階層構造(垂直的)
「セルを読み込み」アクティビティは、利用可能アクティビティの1つ。
利用可能の階層構造から「セルを読み込み」アクティビティがどの階層にあるかを確認する。
利用可能>アプリの連携>Excel
上記の階層に「セルを読み込み」アクティビティがあった。

「セルを読み込み」アクティビティは、前回記事の「セルに書き込み」アクティビティと同じ階層にあるんだね。
前回の記事

同階層(水平的)
同じ階層にどのようなアクティビティがあるか確認する。
そして、「セルを読み込み」アクティビティと類似のアクティビティ、相違のアクティビティを主観的に決める。
そうすることで、「セルを読み込み」アクティビティを理解した後に、類似・相違アクティビティの機能を予想できる状態になる。
前回の記事では、「セルを読み込み」アクティビティを「セルに書き込み」アクティビティの相違アクティビティとした。
前回の記事

・類似アクティビティ
「セルを読み込み」アクティビティの類似アクティビティを以下とした。
・セルの数式を読み込み
・セルの色を取得
・列を読み込み
・行を読み込み

「セルが1つのみ、かつ、色が黄色」のアイコンを類似アクティビティとしてみた。
・相違アクティビティ
「セルを読み込み」アクティビティの相違アクティビティを以下とした。
・範囲を読み込み

アイコンに表示されているセルの数の違いに着目して、相違アクティビティを決めてみた。
2.機能理解
機能を理解する上で2つのアプローチをとる。
1つ目は設定項目の理解
つまり、プロパティの理解
2つ目は実際の動作の確認
つまり、予想と結果を確認する作業
プロパティ
プロパティの対応関係と扱えるデータ型を見てみる。
・対応関係
プロパティの項目とパネルに表示されている項目の対応関係を見る。
特に気になることはない。
今回は、取得したデータを変数Cellに格納し、「メッセージボックス」アクティビティでその変数を表示させて動作の確認を行う(本記事後半)。
・扱えるデータ型
プロパティの項目ごとに扱えるデータ型を調べた、結果は以下。
項目 | データ型 |
表示形式を保持 | Boolean |
プライベート | Boolean |
シート名 | InArgument<String> |
セル | InArgument<String> |
表示名 | String |
結果 | OutArgument |

今まで特に気にしてなかったけど、「String」「InArgument<String>」の違いはなんだろう。また、結果の「OutArgument」はどういう意味?
「Argument」でググってみたところ、「Argument=引数」ということは分かった。
UiPathでの「引数」は、”ワークフローファイルをまたいでデータを共有する仕組み”と理解している。それとどう関係があるのだろう?
動作確認
動作確認を行う。
「セルを読み込み」アクティビティは、「Excelアプリケーションスコープ」アクティビティの中で動作するため、下記画像のようになる。
上記フローは、指定のExcelファイルから読み込んだデータを変数Cellに格納し、その変数Cellを「メッセージボックス」アクティビティで表示するように設定した。
まずは、A1セルを読み込んでみる。A1セルに記入されたデータは「セル」という文字列。
実行。
メッセージボックスに「セル」と表示されるはず、
予想通りだった。
他の文字列を読み込んでみる。
実行。
うん。そうなるね。
A2セルに記入されたデータを読み込んでみる。
実行。
まぁ、そうなるよね。
存在しないシートからデータを読み込む設定にして、実行してみる。

「セルに書き込み」アクティビティの場合は、自動的にシートが作成された。「セルを読み込み」アクティビティの場合もシート作成されるのかな。
実行。
いや、エラーとなった。

存在しないシートからは、データ取得できないみたいだ。
読み込み系アクティビティは、すべてそうなるのかな。
空欄のセルを読み込んだ場合は、どうなるのだろう。
実行。
空欄のまま、読み込まれたようだ。
複数のセルを読み込めるかやってみる。
指定のセルを「A1:A3」とする。

「セルに書き込み」アクティビティでは、複数セルに書き込めた。
「セルを読み込み」アクティビティでも、複数セルを扱えるのか。
セル内容は以下。
実行。
A1セルのみ読み込めたようだ。
プロパティ>入力>セル
上記の説明文を確認する。以下画像。
読み込みセルをセル範囲で指定します。

「セル範囲で指定」とあるならば、複数セルを読み込めそうな気もするが、、自分のミスで複数セルを取得できていないだけかもしれない。
気を取り直して、「A1,A3」と設定して、実行してみる。
エラーとなった。

「セルを読み込み」アクティビティは、1つのセルしか読み込めないのかもしれない。
話題を変える。
数字の取得を試みる。取得するデータは「123」という数字。問題なく読み込まれるだろう。
実行。
エラーとなった。
数字を文字列に変換して、再度試みる。
実行。
文字列としての「1」は取得できた。

え、int32型は取得できない??
数式を読み込んでみる。
実行。
エラー。
関数は?
実行。
やはり、エラー。

あ、読み込んだデータを格納する変数のデータ型を変更すればいいのでは!?
変数の型を確認。
String型だったので、Int32型に変更。

これで、数字も読み込めるはず!
実行。
エラー。

うそやん。

(エラー文、、エラー文を見るのだよ)

ん、エラー文を見ると、「System.Double」がなんちゃらと書いてある。これを変数の型に設定すれば良いのかも。
変数の型を「System.Double」に変更。
実行。
数字を読み込めた。
関数の結果も読み込めた。
変数の型Doubleで文字列を読み込むことは、
もちろん、
できない。

つまり、読み込むデータ型に合わせて、変数の型を調整しなきゃいけないんだね。
正直、めんどくさいな。すべてのデータ型に対応できる万能な型があれば良いのに。
話題を変える。
プロパティのオプションの「表示形式を保持」に着目する。
「表示形式を保持」の説明文は、
セルの表示形式を保持します(通貨、日付など)。
とのことなので、A1セルを通貨、A2セルを日付の書式にする。
実行。まずは、通貨のA1セルを読み込む。
エラー。
エラー文を見るに、変数の型が適していないようだ。
String型に変更して、実行してみる。
正しく表示された。
A2セルの日付もString型で正しく表示された。

数字の「1」は、Double型。数字の「1」の書式を通貨にした場合はString型。ややこしい。
動作確認 まとめ
動作確認で分かったこと
・「セルを読み込み」は1つのセルしか読み込めない(おそらく)
・読み込むデータ型に合わせて、変数の型を調整する必要がある
・セルの書式が変わると、そのセルのデータ型も変わる

セルから読み込むデータの型を把握して、「セルを読み込み」アクティビティを使わないと、エラーまみれになりそうだ。
3.疑問
疑問①
今回、「セルを読み込み」アクティビティで取得したデータの型は、Double型とString型だった。セルからデータを取得する際、ほかにどのような型を取得する場合があるのだろうか。
疑問②
複数のセルを読み込むアクティビティはなにか?
4.参考文献

コメント