【いきなりStudio18】(ソース・テンプレート編)Configファイルの読み込みでガチろう⑤~ガチラーは、Excelを閉じるのに、ブックを閉じるアクティビティ以外は基本使わない。「動けばいいや」の自称さんほど、処理時間を自分で長くし、ロボパを悪くする( ´∀` )
さてと、前回
で、
シートの確認
までやったので、今回は
【ソース・テンプレート編】
の最後、
データベースの中身の確認
ブックを閉じる
の
ガチりかた
をやってく。
ん❓👀急に出てきた【ソース・テンプレート編】って何❓
まあ、勘の良い人なら既にお気づきだとは思うけど、
実は、この【いきなりStudio】でこれまでにやってた記事は全て、
ロボットを実行し、
Configファイルを読み込み
安全にコカして、エラーを出力しつつ、
それ以降で組み込む全ての処理の大元になり、流用して使えるモノ
=テンプレート
の
ソース版👉ソース・テンプレート
の作りかた
を
現場での経験を交えた
考えかた
まで踏まえて
順を追って説明してただけ( ´∀` )
なんだよねえ( ´∀` )
まあ、詳しくは、次回からやる
【実践編】
で、
なんかで作った
ソースをStudioで作りながら
じっくり説明はするけどね( ´∀` )
さてと、んだば早速、本題💃
これまでのソース
今回対象のアクティビティ
知識面については、下記リンクを見てな( ´∀` )
関連アクティビティ
実際に、今回の操作
前回シート名までは読み込んでるので、
問題がなければ、
ブレークポイントを追加して、ファイルをデバッグすると、ローカルのReadMKakuConfigディクショナリ
値の追加までは出来るんだけど、前回説明した三大巨頭のひとつで、
操作ミスや連携ミスなんかで、誤ってファイルやシートを消した
↓
どうせ関係ないだろうけど、ミスがバレるのが嫌だ
↓
同じ名前のファイルでシートだけ作っとけばバレないだろう
↓
各シートのセルが空のファイルが出来上がり
で気づかずに実行するとどうなるか👀❓
実際すべてのシート名までそのままに
にしてファイルをデバッグすると
ローカルで同じようにReadMKakuConfigディクショナリを見ると、
その上、さっきのブレークポイントを外して、Main.xamlから実行してみても
これって、
後続の処理で使うパラメータが何もない=空のモノを読み込んで、正常終了しても意味なくないか👀❓
だし、
どっちみち、後続の処理でコケるだけなら、ここまででコカした方が安全じゃね👀💦
でしょ( ´∀` )
まあ、やり方としては、
繰り返しの中で、DataTableの値がないかを判定する
全ての読み込み処理が終わった後で、必ず使うキーがReadMKakuConfigディクショナリに存在するかを確認する
全部繰り返しが終わった後で、ReadMKakuConfigディクショナリの値数が0かで判定する
なんかがあるとは思うんだけど、
👉繰り返し処理の中でコカすので正常なエラー対応でコケたのか判断が複雑になる
👉じゃあ、業務がどれだけ変わっても、未来永劫必ず使うキーって何❓👀そんなもん存在すんのか❓
ってなるので、
繰り返しの中での条件判定を避けて、キーの存在確認に左右されない方法
👉3が一番シンプルで簡単
てのが分かると思う( ´∀` )
なので~~~
全てのシートの各行の読み込みとReadMKakuConfigディクショナリへの代入が終わった
分かりやすいように折りたたむと
の条件式に、
ReadMKakuConfig.Count <> 0
を追加
で、いつもどおり、
0だったら、ビジネスエラーでコカす
0以外だったら、メッセージを出力して、後続処理を続行
にするだけなんで~~~
Main.xamlからファイルをデバッグ
きちんとエラーになって、ステップインで最後まで続行すると
きちんとロボットが最後まで異常終了してくれるし、
Main.xamlからプロジェクトを実行しても
と、ここまで確認出来たら、MKakuConfigファイルを元に戻してあげて、ファイルをデバッグ
で、ここまで確認出来たら簡単すぎて、皆さんおざなりになっちゃうんだけど、実は次が一番重要な処理
ここでポイント①:Excelブックを使い終わったら、ブックを閉じるアクティビティを必ず入れる
開発途中では皆さんアクティビティ自体が簡単すぎて素通りするか忘れちゃうことが多いんだけど、
理由:
開発途中ではExcelブックが閉じてることが殆ど
👉気づかない
んだけど、
OCなんかで定期実行すると、Excelブックが開きっぱなし
↓
次回実行時も開いたままで、想定外のエラー発生
↓
使ったExcelは処理が終わったら確実に閉じる処理くらい入れとけや(# ゚Д゚)
でお客さん激オコ
はよくある話なので~~~( ´∀` )
一歩前へ:ブックを閉じるアクティビティとそれ以外のアクティビティの違い
でも書いたんだけど、普段作業が終わったExcelファイルを閉じるときって、右上の×ボタンで閉じる
と思うんだけど、これが
ブックを閉じるアクティビティ
👉単純に使い終わったExcelを閉じるだけ
それ以外のアクティビティは、実は、タスクマネージャをわざわざ開いて、プロセス自体を強制的に終了させたり、
コマンドプロンプトを開いて、コードでExcelってアプリケーションを終了させたりしてるようなもの
👉普段の手作業でExcel触るだけの単純なExcel作業でわざわざ、毎回そんなことするヤツめったにおらんやろ( ´∀` )
なのに、いざロボットを組み込んでく作業で、「動けばいいや」でやってると、
何故か、ブックを閉じるを使わずに
わざわざ他のアクティビティを使いたがる人
がいるのよねえ( ´∀` )
さすが、自称さん
なんで、ブックを閉じるアクティビティ以外は、基本使わないの❓👀
実は、Excelって普段手でやる操作では気づかないことが多いんだけど、
Excelもアプリケーションのひとつ
なので、
終了→再起動を繰り返すとどんどん処理が遅くなっていく
場合によっては、色んなところにキャッシュが溜まっていく
その結果、
想定した時間よりも全体の処理に時間がかかる
値の取得が出来ない
👉想定してないエラーの原因とか処理時間の増加
を自分で引き起こす結果
自分の経験してないことでしか判断しようとしない人で「そんなことあるわけないでしょ❓👀」って思う人も多いんだけど、実際、
とある開発現場のREFrameworkを駆使したソースで、
セッションを活かしながら、全体で数百~数千行程度の処理なのに、Excelが関する繰り返し処理の不要なところに、わざわざ、
毎回Excelプロセスの終了を入れてた
繰り返しの回数分すべての処理で、
Excelの再起動が入る
=Excelの起動処理がどんどん重くなっていく
結果、すっげえ全体の処理自体は単純なのに、
Excel自体のパフォーマンスで時間がかかり、3時間以上とか時間かかってた( ´∀` )
で、実際、そのロボットの改修を任されたので、まずやったのは
プロセスの終了
を削除して、後述の処理時間を長くしてしまうプロパティ設定の
変更を保存の✓を削除
ブックを開きっぱなしにするに✓を入れる
にしただけ( ´∀` )で、
処理速度が3倍以上になる
=処理時間が、全体で1時間前後になった
からねえ( ´∀` )
「動けばいいや」で、そのアクティビティやプロパティの意味を考えずに同じ動きだから結果は同じ~~で漫然と組んで、処理時間が大きく変わったり、自ら不要に伸長させたりって人は多い。
てか、ブックを閉じるアクティビティですら、
対象のExcelブックに関する処理が全て終わった後で、最後の最後に閉じればいいので、何回も繰り返しの中で、閉じるなんてまずやらないけどね( ´∀` )
手作業でやってるときに、
1行とか1つのセルとかに何かを書き込む度に、Excelを閉じて開きなおす人なんておらんやろ👀💦
全ての編集とか追記が終わってから、最後に閉じるでしょ( ´∀` )
ここでポイント②:処理時間を長くする=ロボパを悪くするプロパティ設定
■モダンのExcelファイルを使用アクティビティ
・Excelファイルを開いたままにするに✓なし
処理を抜ける度に、Excelを閉じる。
=繰り返しで同じ処理に入ったら、同じブックを開き直す。100回繰り返したら、100回、同じブックを開き直してるようなもの。
👉全部の処理が終わってからブックを閉じればいいだろ( ´∀` )
・変更を保存に✓あり
何かを書き込む度に、Excelを上書き保存する
=100回どこかのセルに書き込むなら、100回上書き保存を繰り返してるようなもの。
👉全部書き込んでから、まとめてブックを保存で良いだろ( ´∀` )
■Excelアプリケーションスコープ
・可視、変更を保存、存在しない場合ファイルを作成のいずれにも✓あり
・可視:Excel画面を表示する
👉別に画面に表示しなくても、やってる処理は同じだし、OCなんかで自動実行だと誰も見ないから、普通は✓を外す。
・変更を保存:何かを書き込む度に1回1回上書き保存する
👉全部の処理が終わってから、1回保存すれば十分。
・存在しないファイルを作成
👉ファイル名に可変な動的変数なんかを入れてると、判定するファイル名が変わって毎回存在しないと判定したら、ファイルを作りに行っちゃうなんてことが起こるので、✓を外しておいた方が安全。
なので、クラシックで今やってるソースも
プロジェクトを実行すると、これだけ単純な処理でも、、、
これが、
繰り返しExcelに1行ずつ何かを書き込む
処理で、1万行繰り返すだったら❓👀単純計算でも
3×10000秒=30000秒=500分=8.3時間
差が出ることになっちゃうからねえ( ´∀` )
ここでポイント③:似通ったアクティビティの違いを考える
使い終わったExcelブックを閉じる処理ひとつとっても、
ブックを閉じるアクティビティ
プロセスの強制終了アクティビティ
(モダンの)Excelファイルを使用アクティビティ
みたいな
目先では、似通った動きをする
ものは多いんだけど、プロセスやアプリケーションの終了なんて、
何か想定外のエラーが起きたりしたときに、
Excelの×ボタンを押しても閉じれない
確実にExcel自体をすぐに切らないと余計なデータの書き込みなんかを継続されたらヤバい
時じゃないと
強力過ぎて使わない
下手したら、次回からExcel自体が開かなくなるか、データが全部飛ぶ可能性もあるからね( ´∀` )
普段、自分が手で作業してるときに、さっきのタスクマネージャーを開くのってどんな時👀❓
って想像してみたら、たかが使ったExcelを使い終わったから閉じるだけなのに、
どんだけ強力=危険なことしてるか
分かるんじゃない❓👀💦
さてと、内容としては以上。
毎度恒例の
ソース・リファクタリング
ここまでの工程で、余計なブレークポイントは既に削っちゃったので~~今回は、今回追加した条件分岐に注釈とか名前の変更をしてくだけ( ´∀` )
■リファクタリング前
■リファクタリング後
ついでに、ちょっとThrowのメッセージも、
エラーは分かったけど
じゃあ、どうしたらいいか
が抜けてる箇所がいくつかあったので~~~
■ひとつ目:ディクショナリ数が0以外かのElse
■ふたつ目:指定した名前のシートは存在するか確認のElse
てな感じで変更しとこう。
ここまで書いとけば、後はお客さん=業務側が
自分たちで調べるはず( ´∀` )
最後に、リファクタリング後のファイルをデバッグ
あ、そうそう最後に:数記事前に作った最低限の肉付け前のソースと肉付け後のソースを見比べとこう( ´∀` )
で作った
■最低限のソース
■肉付け後の最新ソース
ま、何かの参考になれば、
それで幸い( ´∀` )
さてと、今年は
当初、酒飲みながらStudioXの学習がてら気ままに動かしながら始めたけども、まあ、ちょうどキリの良いところで終わってよかったわ( ´∀` )
よっしゃ、後は、この記事公開してから、これまでの
【いきなりStudio】シリーズ
のタイトルに、
(ソース・テンプレート編)
を追加だけしとこう( ´∀` )
さてと、次回は
気が向いたときに、このソース・テンプレートを使って、これまでに作ったYoutubeロボットなんかを組み込んでく
【実践編】
をやってこ( ´∀` )今度は、
読み込んだConfigファイルを使ったソースの組み込みかた
ライブラリの作り方
実践向けのフォルダ構成
各ソースファイルの開きかた
などなど、
紹介出来てないことは、
山ほどある
ので~~~~
てか、
最新の民主化されたテクノロジーを使って、
ライフワークで
趣味で
気楽にやってるだけ
なので
終わりなんてないかもね( ´∀` )
では、「光る君へ」の最終話見ながら
お昼ご飯を食うので
また、次回( ´∀` )
皆さま、良いお年を💃