11176
(ひろみ)
1
いつも勉強させて頂いています。ありがとうございます。
今回気になった事があったのでお聞きさせて下さい。
エクセルを詠み込んで、データテーブルにエクセルデータを入れるとき、みなさんどのアクティビティを使っていますか?
①
「UiPath.Excel.Activities.ExcelReadRange」を使っていますか?
※UiPath.Excel.Activities.ExcelApplicationScope内でしか使えない
②
「UiPath.Excel.Activities.ReadRange」を使っていますか?
わざわざExcelApplicationScope内でしか呼べないExcelReadRangeを使う意味がわからなくて、②を使っていましたが、
ユーザ定義のセルに出くわして、実装方法を見直しています。
②の方法だど、オプションで、「表示形式を維持」にしても、ユーザ定義のセルは正しい値が、データテーブルに入ってきませんでした。
セルの書式設定がユーザ定義のセルがちゃんと読めないのであれば、②の方法の呼び方はどんな時も使わないようにしようと思いました。
ただ、サンプルなどでは割と②の方法を使っている方が沢山いて、②の方法は何か他に①より優れている点があるのでしょうか?
漠然とした質問ですが、どっちを使うのか?2つあると迷います。
どういった基準で判断されているのか?皆様の意見を聞きたく、お願いいたします。
サンプル上げておきます。醜い点などありましたらすいません。
sample.zip (23.7 KB)
HANACCHI
(はなっち!UiPath Japan MVP 2019-2022)
2
私は「ExcelApplicationScope」の下にアクティビティを配する派ですね。
「ExcelApplicationScope」の出力のワークブックを変数に取れば、
別のタイミングで、ファイル名を指定せずとも「ExcelApplicationScope」が使えますし。。。
Yoichi
(Yoichi)
3
こんにちは
これらの使い分けに関しては、それぞれの大まかな動作原理を把握しておくと判断しやすいと思います。
ExcelApplicationScope以下で使うアクティビティですが、
これらは端末にインストールされたEXCELを通じて、情報の入出力を行います。
そのため、
EXCELで表現されている情報をそのまま取得できたり、マクロ/VBAの実行が可能であったりします。またRead/Write系のアクティビティはあくまでEXCELのメモリ上のワークシートへのアクセスなので、例えば最終的にxlsx等のファイルに反映させるタイミングは別にすることもできます。
反面、EXCELのプロセスを起動するための時間やリソースが必要になる、そもそもEXCELがインストールされていない端末では動作しない等のデメリットもあります。
一方、System-File-Workbook以下にあるReadRange等のアクティビティですが、
これらはサードパーティ製のライブラリ(NPOIやClosedXML)を用いて、xlsxファイルに直接アクセスします。
エクセルを起動しないため、単純な動作の場合はExcel Application Scope以下のアクティビティよりも高速に動作しますし、ロボット端末でEXCELがインストールされていなくても動作しますので環境依存性が低いといえると思います。
反面、サードパーティ製ライブラリを使いますので、実際のEXCELアプリケーションとの互換性がやや落ちたりしますし、ファイルへの直接読み書きが基本になりますので、例えば、非常に多くの回数の書き込みをするケースでは、却って遅くなるケースもあります。(Excel Application Scopeではファイルへの書き込みを最後にまとめてすることも可能なことと比較して)
このような特性を把握したうえで、要件に照らし合わせて判断されると良いと思います。
3 Likes
11176
(ひろみ)
4
いつもありがとうございます。
ワークブックを変数に取る方法も便利でした!
いろいろ勉強になります。ありがとうございます。
11176
(ひろみ)
5
Yoichiさま
全て知りたかった事を書いて頂けて、ただただ感謝です。
なぜ2つあるのか?使い分け方もやっと分かりました。
意味もわからず、なんとなく使っていたので、改めたいと思います。
ご教授大変ありがとうございました。
2 Likes