
【UiPath StudioXの遊びかた 11】逐条編⑧Excelファイルを使用で遊ぼうの続き~ひとつのセルに何かを入力する度にわざわざ保存をする人はおらんやろ( ´∀` )ブックを閉じるがないの衝撃👀マジか❓
さてと、前回
の続きで~~~
使う頻度が最も高い
プロパティの設定ひとつで処理結果や処理速度に影響を与える
☞めちゃくちゃ強力なアクティビティ( ´∀` )
って書いた
Excelファイルを使用アクティビティの詳細
を見てく💃
眠くなる人も居るかもしれないけど、今しばらくお付き合いを
って書いてるオイラが実は良い感じに眠くなってきてる( ´∀` )
んだば、今回も早速
Excelファイルを使用アクティビティ
を見ると、今時点では
アクティビティの構成
◇アクティビティの本体
Excel ファイル - フィールドの横にある [参照] アイコン をクリックし、オートメーションで使用する Excel、CSV、またはテキスト ファイルを参照して選択します。オートメーションの実行時に新しいファイルを作成するには、ファイルを作成するフォルダーを参照し、ファイル名を入力します。
異なる名前で毎日ダウンロードされるファイルなど、動的な名前を持つファイルを使って作業する必要がある場合は、フィールドの右側にあるプラス メニューのオプションの 1 つを使用してファイル パスを指定できます。たとえば、提供された数式を使用して、毎日ファイル パスを抽出できるプロジェクト ノートブックのセルを選択します。または、[実行時に確認] を選択し、プロジェクトを実行する際にファイル パスを入力します。この状況で、ファイルのデータを使用するアクティビティを簡単に構成できるようにするには、テンプレート ファイルと同じ形式の別の Excel ファイルを選択します。または、ファイルの SharePoint URL を入力することで、リモートの Excel ファイルで作業できます。
参照名 - オートメーション プロジェクトでファイルを参照するときに使用する名前を入力します。
変更を保存 - ファイルの内容を変更する Excel アクティビティが実行されるたびにファイルを保存する場合は、このオプションを選択します。このオプションが無効化されている場合は、[Excel ファイルを保存] アクティビティを使用してください。既定では、このオプションは選択されています。
変更を保存するオプションが無効な場合は、[データ マネージャー] パネルの Excel リソースの横に「自動保存: オフ」というメッセージが表示されます。
存在しない場合ファイルを作成 - このオプションを選択すると、指定したパスにブックが見つからない場合に Excel ブックが新規作成されます。選択しない場合は、指定したパスにブックが見つからなければエラーが発生します。既定では、このオプションは選択されています。
読み取る値の書式 - Excel から読み取る値に適用する書式設定を選択します。
プロジェクトと同じ - [プロジェクト設定] から設定値を継承します。
既定 - Excel によって返される既定の書式設定を適用します。
生の値 - Excel から生の値を取得し、すべての書式設定を無視します。
表示値 - Excel に表示されているとおりに値を取得します。
テンプレート ファイル - 自動化する Excel ファイルが動的であるか、オートメーションの設計時に存在しない場合 (オートメーションによってファイルがダウンロードされるか、作成される場合など) は、このオプションを選択して、設計時には対象のExcel ファイルと同じ構造を持つ別の Excel ファイルを使用します。
このファイルのデータは、プラス記号 のメニューから選択できるため、[Excel ファイルを使用] 内に追加されたアクティビティの設定が容易になります。テンプレート ファイルは設計時にのみ使用します。オートメーションが実行されると、[Excel ファイル] フィールドに定義されたファイルが処理されます。

◇プロパティ パネル
共通
表示名 - デザイナー パネルに表示されるアクティビティの名前です。
ファイル
編集用パスワード - ファイルがパスワードで保護されている場合に、Excel ブックの編集に必要なパスワードです。
パスワード - ファイルがパスワードで保護されている場合に、Excel ブックを開くのに必要なパスワードです。
ブック パス - Excel ファイルへのパスです。ファイルが存在せず、[新しいファイルを作成] オプションを選択する場合は、StudioX によってファイルが作成されます。
その他
プライベート - オンにした場合、変数および引数の値が Verbose レベルでログに出力されなくなります。
存在しない場合ファイルを作成 - 「アクティビティの本体」の説明をご覧ください。
Excel ファイルを開いたままにする - プロジェクトを実行する際にファイルが開かれていない場合に、プロジェクトの実行が終了した後もブックを閉じずに開いたままにします。このオプションは、後でファイルを確認する場合に使用できます。
読み込む値の書式 -「アクティビティの本体」の説明をご覧ください。
読み取り専用 - 選択すると、指定したブックが読み取り専用モードで開きます。このチェック ボックスを選択すると、編集のためにロックされていたり、編集用パスワードが設定されていたりする Excel ファイルでも、データ抽出操作を実行できます。このオプションは既定で選択されていません。
変更を保存 - 「アクティビティの本体」の説明をご覧ください。

てな感じらしい👀💦
実際、ひとつひとつ検証してみよう
まずは、エラーが出てるのでファイルパスをセット


確認を左クリック


っとここで、もしExcelブックにパスワードとか編集パスワードが設定されてるなら、
編集用パスワード - ファイルがパスワードで保護されている場合に、Excel ブックの編集に必要なパスワードです。
パスワード - ファイルがパスワードで保護されている場合に、Excel ブックを開くのに必要なパスワードです。
でパスワードとか編集パスワードを入力すればいいみたいだけど、
オイラは特に練習帳にパスワードを指定してないからここはやらない
もしやるのであれば、


んで次に表示名を
誰が見ても分かるソースにしとくと後が楽
っていつもゆーてることをやって~~~



ここでポイント①ノートブックやConfigファイルに外出しすると、、、
後から変更が入るときにノートブックに指定したファイルの該当セルのパスを書き換えるだけで良いから
管理は楽になる
んだけど、セルの値しか表示されなくなるので、
ソースだけだと分かりにくい
こーゆー書き方をすると
トレードオフ=0か1かの二進数思考( ´∀` )な人
ほど、
「ソース見ればいいから、外出しなんてしない」
「結局はソースが全て」
みたいに短絡的に考えるんだけど、んなもん別に、
アクティビティの表示名に明記しといてあげればいいだけ
なんだよね
☞実はトレードオフな関係でも何でもない。
とまあここまでのプロパティは結構単純なんだけど、
「プロパティなんか別に大した差はない」
「動けば一緒」
って人が一番嵌りやすいのが、

ってか、今から説明はしてくけど、オイラからしたら
オプション=おまけ機能
って書いておきながら、
そこに不用意なチェックなんかが入っているから処理全体に大きな影響を与えまくる全然オプションじゃねーじゃん(# ゚Д゚)
な機能なんだよね~~~
まずは
Excelファイルを開いたままにする




チェックを外すと

てな違いがあるんだよね~~~
ここでポイント②ブックを開いたままに✓を入れて処理を完了させると、、、
実は、

でExcelを見ると、

UiPath Studioであればブックを閉じるアクティビティでやんだけど、
ないんかい( ´∀` )
☞簡易版って、、、
逆にブックを処理後に手動で閉じさせる方が難しいわ( ´∀` )
自動化の意味ないじゃーん
「処理は自動化できます。ブックは自分で閉じてください」
ってロボットにゆーの👀💦❓
ロボ実行後に、いちいちブックを閉じさせるUiPath ( ´∀` )
こんなんURで専用端末にやらせよったら、
ブック開きっぱやっでね👀💦
と、いつもどおりある意味安定で話が少し逸れたけど
ここでポイント③ブックは開いたままがいいの?閉じた方がいいの?
って短絡的で答え=正解を決めつけたがる人がいるんだけど、そんなもん
状況によるとしかいーよーがない( ´∀` )
例えば、
シートに何かの書き込みをしてから、ブックを保存したい
書き込み回数が数十万行
ロボの処理に数分~数時間かかる
てな場合
☞ロボ処理開始から書き込みまでの間に、そのブックが部署共有ファイルだとして、誰かがそのファイルを開いていたら、、、
他の人が開いてる
=読み取り専用で書き込みできない( ;∀;)
☞エラー発生
ってなっちゃうし、だったら、
処理開始で最初にブックを開いた時点でブックを開きっぱなしにしておいた方が安全。
逆に、何かのサイトからセレクターやデータスクレイピング(StudioXだと表の抽出)

で、データを複数のブックを新規作成して書き込みたいって時にいちいちブックを開きっぱなしにしてると、
繰り返し回数やタイミングによるけど、ブックが閉じられてなくてこっちも想定外のエラーでコケる可能性あり
だからね👀
結局は、
自分がしたい処理に応じて、チェックを入れるか外すか
=プロパティの設定ひとつでロボの処理は変わるってこと( ´∀` )
さてと、本題に戻って~~
読み取り専用

チェックを入れて実行してみよう

ここでポイント④読み取り専用はどこで使うの?👀
「ブックを開いて、何かのシートに入力した値を取得したい」
みたいなときに使うことが多いかな
☞値を取得するだけで、ブック自体を特に編集して保存する必要もないって時にわざわざ、ブックを編集モードで開く必要はないから( ´∀` )
てか次にやる変更を保存も不用意にチェック入れてる人いるけど、
それで全体の処理速度を遅くしたりしてっからね~( ´∀` )
ここでも
で書いたとおり、
自分で処理時間を不用意にプロパティにチェック入れたり、入れなかったりで伸ばしてんだよね~~~
せっかちで教科書どおりにだけやって、自分でしっかりひとつひとつ動かさない=肌感覚で身に付けようとしない人ほど特に👀💦
ちなみにとある会社で、ソースコードを全面改修したときに、
よくわかっていない前任者が、ここのチェックを不用意に入れまくってり、抜けてたりして、すっげ~~簡単な処理なのに4時間とかかかってたモノを、
でも書いた手法とか今回の記事で書いてる知識だけを駆使して、特別なことは何もせずに改修した結果、
1時間弱で処理が終わる=処理速度3~4倍
てことまで出来ちゃうんだけどね👀ま、だから、
処理時間 長くしてるの お前さん( ´∀` )
って書いたんだけど、意味が分かってくるでしょ❓👀
だからこそ、Excelファイルを使用アクティビティは、
使う頻度が最も高い
プロパティの設定ひとつで処理結果や処理速度に影響を与える
☞めちゃくちゃ強力なアクティビティ( ´∀` )
って冒頭にも書いてんだよね( ´∀` )だからこそ、実はこれまでの記事でも、
逐条編のキーワード:プロパティとの付き合い方
って書いてたはず( ´∀` )処理を難しくしてるのも、長くしてんのも結局は、
それを組んでる自分自身
だもん。ま、だから
ひとつひとつ遊んで動かしながら、
肌感覚で身に付ける
しかないんだけどね~~~~
ソースでもコードでも答え=正解なんてないもーん( ´∀` )あるのは、
最適解
だけ。さてと、じゃお次は
存在しない場合ファイルを作成

ここは、もう実際にやってみた方が早いので~~~



エラーは起きないはずですが( ´∀` )


良い感じにし過ぎてるとあるある( ´∀` )


ここでポイント⑤これも諸刃の剣
見てわかるとおり、実行するとなければ指定したフォルダパスにファイルを作りに行くから、
意図的にチェックを入れてる☞問題なし
このプロパティの存在を知らない or チェックを外し忘れ☞最悪
なので、
気を付けましょう
としかここは言いようがない( ´∀` )なので、普段ロボット開発するときに、

慣れないうちは、面倒でも

とまあ、オイラならこんな勝手にファイル作る機能なんざ要らんから
もちろん

プロパティのチェック外せば、アクティビティ本体のチェックも外れるし~~~

では今回のクライマックス
変更を保存

ここが不用意に処理時間が延びる8割以上の原因と言っても過言じゃないんだよね~~~変更を保存って、端的にゆーてしまうと、
ひとつのセルに何かを書き込む=変更
する度に
毎回、保存ボタンで上書き保存をしてる
処理なんだよね~~~
例えば、40万行の処理をしないといけないときに、
セルに40万行、何かを書き込む度に保存してたら、
1行ずつ書いても40万回保存
3列の値で1セルずつなら120万回保存
してるようなもんなんで、Excelで普段仕事してる人なら分かると思うんだけど、
Excelは保存を連続でかければかけるほど、
保存にかかる処理時間が長くなっていく
☞ロボの処理でエラーが出なくても、処理時間が圧倒的に伸びる
んだよね~~~この動き自体をよく理解してない人に限って、

で「実行する度に処理時間が遅くなるのは何ででしょう👀❓」なんて聞いてくるからね。
一歩前へ:処理の度に変更を保存しようが、処理が終わってからブックを保存しようがどっちでも良い処理なら、
普通=当たり前の作法では、

全ての書き込み処理なんかが終わってから
ファイルを保存アクティビティ
で保存をするんだよね~~~

しかも、コイツも前回やった
リソースアクティビティ 対 リソース以外アクティビティ
でゆーたら後者だから

で、


処理を実行してみると、、、




もう一歩前へ:変更を保存にチェックを入れたときと実際に比較~~~



実行






なので~~~

実行


後は、
ウィンドウサイズを変更

これもそれぞれ実行してみると、練習帳を最大化して開くか最小化して開くかだけの違いだから~~~
まとめ
てな感じで色々遊べるからやってみてね~~~
今回は以上💃
さてと次回は
今回組んだソースで
特定のシート名の存在を確認する処理にやっとこ入ろう( ´∀` )
いや~~Excelファイルを使用アクティビティはマジでプロパティも多過ぎる上に1個1個が強力だから、
長かった~~~~( ´∀` )
まあ、アクティビティがひとつだからこうならざるを得ないけどね。