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

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

「範囲を読み込み」と「範囲に書き込み」アクティビティの位置関係に規則性はないのかな。自分なら、以下のように並べるけどな~。
・セルを読み込み
・セルに書き込み
・範囲を読み込み
・範囲に書き込み
自由に並び替える機能はあるかな?
同階層(水平的)
同じ階層にどのようなアクティビティがあるか確認する。
そして、「範囲を読み込み・範囲に書き込み」アクティビティと類似のアクティビティ、相違のアクティビティを主観的に決める。
そうすることで、「範囲を読み込み・範囲に書き込み」アクティビティを理解した後に、類似・相違アクティビティの機能を予想できる。

「範囲○○○」のアクティビティは多いな。
・類似アクティビティ
「範囲を読み込み・範囲に書き込み」アクティビティの類似アクティビティを以下とした。
・範囲の色を指定
・範囲を削除
・範囲を追加
・範囲を選択
・選択範囲を取得

とりあえず「範囲」とつくアクティビティをすべて類似アクティビティとした。
「セルを読み込み・セルに書き込み」アクティビティで扱うデータ型は単一のデータ型だった。「範囲○○」系アクティビティは、複数のデータ型か表形式のデータ型を扱うのかもしれない。


・相違アクティビティ
「範囲を読み込み・範囲に書き込み」アクティビティの相違アクティビティを以下とした。
・ブックのシートを取得
・ブックの全シートを取得
・ブックを保存

「範囲」を包括している「ブック」に着目し、「ブック」とつくアクティビティを相違アクティビティとした。
2.機能理解
機能を理解する上で2つのアプローチをとる。
1つ目は設定項目の理解
つまり、プロパティの理解
2つ目は実際の動作の確認
つまり、予想と結果を確認する作業
プロパティ
プロパティの対応関係と扱えるデータ型を見てみる。
・対応関係
プロパティの項目とパネルに表示されている項目の対応関係を見る。
「範囲を読み込み」アクティビティ
「範囲に書き込み」アクティビティ

両者とも表形式のデータ型DataTableを扱うアクティビティのようだ。
「範囲」系アクティビティは、DataTable型を扱うアクティビティなのだろう。
今回は、「範囲を読み込み」アクティビティで指定のExcelファイルのデータを取得し、そのデータを変数Excelに格納する。それから、変数Excelに格納されているデータを「範囲に書き込み」アクティビティで指定のExcelファイルに書き込む。そして、書き込まれたデータをExcelファイルから確認することで、両者のアクティビティの動作確認を行う(本記事後半)。
・扱えるデータ型
プロパティの項目ごとに扱えるデータ型を調べてみた、結果は以下。
「範囲を読み込み」アクティビティ
項目 | データ型 |
オプション>フィルターの使用 | Boolean |
オプション>ヘッダーの追加 | Boolean |
オプション>表示形式を維持 | Boolean |
その他>プライベート | Boolean |
入力>シート名 | InArgument<String> |
入力>範囲 | InArgument<String> |
共通>表示名 | String |
出力>データテーブル | OutAurgment<DataTable> |
「範囲に書き込み」アクティビティ
項目 | データ型 |
オプション>ヘッダーの追加 | Boolean |
入力>シート名 | Boolean |
入力>開始セル | InAurgment<String> |
その他>プライベート | Boolean |
出力>データテーブル | OutAurgment<DataTable> |
共通>表示名 | String |

出力の項目で使用できるデータ型がDataTableになっている。
「セルを読み込み・セルに書き込み」との大きな違いは、出力のデータ型なのかもしれない。


動作確認
動作確認を行う。
「範囲を読み込み・範囲に書き込み」アクティビティは、「Excelアプリケーションスコープ」アクティビティの中で動作するため、下記画像のようになる。
上記フローは、
「範囲を読み込み」アクティビティで指定のExcelファイル(test.xlsx)のデータを取得し、そのデータを変数Excelに格納する。それから、変数Excelに格納されているデータを「範囲に書き込み」アクティビティで指定のExcelファイル(test1.xlsx)に書き込む設定となっている。
読み込むExcelファイル(test.xlsx)の中身は以下。
とりあえず、実行してみる。
書き込み先Excelファイル(test1.xlsx)の中身は上記画像。

しょっぱなから、思ったように書き込まれていない。
1行目が抜けているな。
「範囲を読み込み」アクティビティのプロパティを確認。
「ヘッダーの追加」にチェックが入っていた。チェックを外して再度実行。
読み込んだデータがそのまま書き込まれた。

思ったように書き込まれた。
ここがスタート地点だな。
読み込むExcelファイルにB列を追加。
範囲の値を「A2」に変更。
実行。

A2より下のセルが取得されるのかな。
上記画像が書き込まれた内容。

A2から右下にドラッグした感じ?を読み込むようだ。
B1に変更して、実行してみる。
上記画像が書き込まれた内容。

B1から右下にドラッグした感じを読み込んだのかな。C列以降のセルに記入がなかったから分かりづらいや。
B1からB2に変更して、実行。
上記画像が書き込まれた内容。
「A1:A3」に変更して、実行。

A1とA2とA3が書き込まれるはず。
上記画像が書き込まれた内容。
「A1:B1」に変更して、実行。

A1とB1のみ書き込まれるはず。
上記画像が書き込まれた内容。
C列を編集。下記画像。
「A1:B2」に変更して実行。

A1,A2,B1,B2セルがそれぞれ書き込まれるはず。
その通りだった。
「A1,B2」に変更して、実行。

A1,B2セルがそれぞれ書き込まれるはず。
エラーとなった。

あくまで読み込む”範囲”を決める機能であって、読み込むセルをそれぞれ”選択”することはできないのかも。
今まで読み込んできたExcelファイルを「Sheet1」、下記画像を「Sheet2」とする。
「範囲を読み込み」アクティビティのシート名を「Sheet2」に変更。
同様に「範囲に書き込み」アクティビティのシート名も「Sheet2」に変更。しかし、書き込み先のExcelファイルには、Sheet2が用意されていない状況。

「セルに書き込み」アクティビティでは、自動でシートが作成された後、書き込みも行われた。今回はどうだろう。

実行。
エラーとなった。
しかし、Sheet2は作成されていた。
変更を加えず、そのまま、再度実行したところ、
正しく「Sheet2」に書き込まれた。
読み込むExcelファイルに数字を羅列した「Sheet3」を作成。内容は、以下画像。
実行。

「セルを読み込み」アクティビティでは、読み込むデータの型に合わせて、格納する変数の型を変更する必要があった。数字だったら、「Double型」に、文字列だったら、「String型」に変更しないとエラーとなった。
DataTable型の場合はどうなるのだろう。

そのまま書き込まれた。
関数はどうなる?
上記画像のように、SUM関数を追加。

関数ごと読み込むのか、関数で計算された結果を読むこむのか。どっちだろう。
結果のみ読み込まれた。
数字と文字列の両方を含んだシートを読み込んでみる。
実行。
問題なく書き込まれた。

DataTable型では、数字と文字列が混在したデータも扱えるみたいだ。
試しに、数字を文字列に変換して、読み込ませてみる。
実行。
数字として書き込まれていた。

これは、エラーの原因になりそうだ。
あえて、格納する変数の型を変えてみるとどうなるかやってみる。
もちろん、エラーとなった。
プロパティ欄に着目してみる。
「範囲を読み込み」アクティビティの「ヘッダーの追加」にチェックをつけて、実行してみる。
1行目が読み込まれていない状態で書き込まれた。
1行目にヘッダーを作成して、再度実行。
やはり、1行目が読み込まれていない。

まぁ、UiPathが1行目がヘッダーっぽいかどうかを判断して、残すかどうか決める……なんてことはないか。
「範囲に書き込み」アクティビティのプロパティにも、「ヘッダーの追加」があった。
チェックをつけて、実行。
ヘッダーも書き込まれた。

読み込むファイルにヘッダーがあり、そのヘッダーを書き込み先でも使用する場合は、両方の「ヘッダーを追加」にチェックをつければ良いということかな。
色々な状況によって、両方とも「ヘッダーを追加」にチェックをつける場合と、片方のみチェックをつける場合などありそうだ。
「範囲を読み込み」アクティビティの「表示形式を維持」に着目してみる。
説明文は上記画像。

通貨と日付の書式を設定して、読み込んだところ。
同じように書き込まれた。

書式を変えると、データ型も変わる場合があったため、「セルを読み込み」アクティビティでは、格納する変数の型に注意する必要があった。
一方、「範囲を読み込み」アクティビティでは、格納する変数の型DataTableのままで読み込めた。
話題を変える。
「範囲に書き込み」アクティビティの「開始セル」に着目。
開始セルを「A2」に変更して、実行してみる。
読み込んだデータがA2から書き込まれた。
開始セルを「A2:B3」としてみた。
開始セル「A2」と同じ結果になった。

あくまで、記入をはじめるセルを決めるだけだって、記入する範囲を決めるわけではないみたいだ。
以下、蛇足。
「DataTable型+DataTable型」はエラーとなった。

表形式のデータに、データを追加する方法とかあるのかな。
動作確認 まとめ
動作確認で分かったこと
・「範囲を読み込み・範囲に書き込み」アクティビティはDataTable型のデータを扱う
・あくまで範囲を扱うアクティビティ、セルの複数選択はできない
・DataTable型の変数の中にDouble型やString型が混ざっていても問題ない

「範囲を読み込み・範囲に書き込み」アクティビティを理解する過程で、DataTable型についてをより知ることができた!
3.疑問
疑問①
DataTable型の変数の中に、データを追加することはできるのか。そもそも、変数に追加でデータを格納することはできるのか。
疑問②
関数自体を読み込んで、Excelファイルに書き込むことはできないのか。
疑問③
アクティビティ欄を並び替えることはできない?
コメント