111162
(おんじ おたま)
1
こんにちは。初めての投稿になります。
Excelアプリケーションスコープで作業する際について質問します。
現在、Excelアプリケーションスコープをバックグラウンド作業にして繰り返しに組み込んでいます。
当然バックグラウンドで作業を行ってくれますが、作業(Excelの業務)を終了した後にバックグラウンドで残ってしまうことがあります。また、残った時にエラーなどが出てくればいいのですが、エラーは出ずに次のアクティビティにも移動せず停止をしています。停止した後は数時間放置しても次へのアクティビティへ行かず、エラーも出ませんでした。
そこで、手動にてバックグラウンドにあるEXCEL.EXEを落としたところ、続きで次のアクティビティが動作しました。
一応、Excelアプリケーションスコープ内の最後には[ブックを閉じる(Close Workbook)]を入れて対応はしていましたが、ダメでした。
今現在の対応としては、[PowerShell呼び出し(Invoke Power Shell)]にてバックグラウンドのExcelファイルを閉じる指示をするようにしようとしています。
ただ、何が原因で問題が起きているか分かりません。また、PowerShell以外での回避方法が分かりません。
何かわかる方が居ましたら、教えて頂けますと幸いです。
宜しくお願い致します。
cheez_RPA
(いわさき りょうすけ (UiPath Japan MVP 2019 - 2021))
2
開いたExcelファイルを、Workbook型の変数に残していませんか?残していると、そのまま開かれた状態になる動きであったと記憶しています。
上記の状態であれば、Close workbookをExcel Application Scopeの中に含めるのではなく、外に配置した上で、Target > Workbookに変数を指定することで閉じてくれるのではないか、と思います。
3 Likes
HANACCHI
(はなっち!UiPath Japan MVP 2019-2022)
4
Excelアプリケーションスコープのパラメタ:ワークブックに変数BKを指定した状態で、For Eachを使って100個のEXCELファイルを開くROBOTで検証してみました。
・Close workbookがない場合 … 100個のEXCELファイルを開いたのち、100個のEXCELファイルを順に閉じていき、途中で止まる(相談の事象再現)
・Close workbookがある場合 … 100個のEXCELファイルを一つずつ開き、一つずつ閉じる。そのため、EXCELのプロセスは消えている。
※Workbook型を配列に持てなかったので、100個のEXCELファイルを、BK[100]のような配列変数に格納する追加検証は出来ませんでした。。。技術不足です。
2 Likes
111162
(おんじ おたま)
5
回答ありがとうございます!
Excelアプリケーションスコープの外で[ ブックを閉じる(Close workbook) ]を試していなかったので、試してみようと思います!
ちなみに回答の通り、私も変数が原因だと思いました。
その為、変数には格納をしない方法として、Excelアプリケーションスコープ内で有効の[ ExcelWorkbookScope ]を使用していました。
同じ現象が起こるという事は、[ ExcelWorkbookScope ]は変数ということでしょうか?
Yoichi
(Yoichi)
6
こんにちは
上記とは別の原因の可能性という観点で、
Excel Application Scopeから抜ける直前のエクセルに対する操作は何をしていますでしょうか?
EXCELアクティビティパッケージに含まれないアクティビティ=例えばSend Hot Keyによるショートカット操作等を行っている場合、タイミングの問題で動作不安定になる場合があるので、可能でしたら状況を共有いただければと思います。
111162
(おんじ おたま)
7
こんにちは
Yoichiさん、コメントありがとうございます!
Excel Application Scopeから抜ける直前のExcelに対する操作は下記の2つになります。
(2箇所で発生した為)
-
[範囲を読み込み(Read Range)]
-
[範囲に書き込み(Write Range)]
そして、Excelアプリケーションスコープは全部バックグラウンドの動作に設定しています。
また、Excelアプリケーションスコープの最後には[ ブックを閉じる(Close Workbook)]と保存するものに対しては[ブックを保存(Save Workbook)]を設定しています。
ちなみに少し気になってアクティビティの数を確認したところ、800近く存在した為、プログラム自体も重くなっているのかもしれません…。
Yoichi
(Yoichi)
8
こんにちは
レスありがとうございます。
当方が懸念しておりました操作はなさそうです。
あとは明示的に保存を行うなら、自動保存オプションがOFFにするとか、上記でも既にでておりますが、EXCELアプリケーションスコープのプロパティ[出力]-[ブック]の欄が空欄ならClose Workbookは不要、何か変数をいれているなら明示的にClose Workbookを外だしにして閉じるといったところでしょうか。
111162
(おんじ おたま)
9
こんにちは
そうですよね…。
ただ、問題を上げた際にそれまでの経緯がなかったので下記にて説明させていただきます。
-
Excelアプリケーションスコープは自動で閉じるものだと思い、閉じる動作を含めず、繰り返し内にプログラムを作成する。
-
1で作成したものを10回ほどテストする。
-
2/10ほどの確立で問題に上げた現象が起こる。
-
回避策として、[ブックを閉じる(Close Workbook)]を使用する。
-
cheez_RPAさんが上げた内容と同様に変数が記憶してしまっていると思い、Excelアプリケーションスコープ内で有効の [ ExcelWorkbookScope ]を使用して、再度テストを実行。
-
現在の状況
プログラム自体がUiPathからですので、流れがおかしいと思われるかもしれませんが、このような流れになっています。
そしてまだ変数を格納させて、Excelアプリケーションスコープ外で[ブックを閉じる(Close Workbook)]を実践できていないので、そちらを実践してみようと思います。
ただ分岐で格納している変数が違うだけで全く同じ条件のフローがありますが、停止することはありません。
Yoichi
(Yoichi)
10
こんにちは
もし可能でしたら、差しさわりのない範囲で作成されたものをupいただくか、スクリーンショットを貼っていただくと、みなさんからもコメントを出しやすいのではと思います。(まだ権限がないかもしれませんが....)
あとは加えて環境の情報を共有いただくと良いかもしれません。(UiPathのバージョン、Excelアクティビティパッケージのバージョン、EXCELのバージョンなど)
111162
(おんじ おたま)
11
こんにちは
承知しました。
一応、エラーが出ている部分だけ上げさせて頂きます。
ちなみに、どの部分があるともっと想像しやすいでしょうか?
情報漏洩につながるためupできるか分かりませんが、教えていただきたいと思います。
環境については下記になります。
UiPath
UiPath.Excel.Activies(Excelパッケージ)
Excel
Yoichi
(Yoichi)
12
こんにちは
ありがとうございます。
可能な範囲で結構かと思いますので...
今回EXCELアプリケーションスコープ周辺の挙動が怪しそうですので、
- EXCELアプリケーションスコープのプロパティ設定
- そのスコープ中の一連のアクティビティ(開始からスコープを抜けるところまで)
などがあると良いかもしれません。
111162
(おんじ おたま)
13
Yoichiさん
こちらこそ、たくさんの方からご協力やご意見を頂けて幸いです。
本当であれば、全部お見せしたい気持ちです…。
先ほど送りました画像が、スコープ内の一連アクティビティです。
下の画像はExcelのプロパティ設定です。
- Excelプロパティ
Yoichi
(Yoichi)
15
こんにちは
ありがとうございます。大作ですね。
小規模なら検証用の再現コード作ることも検討できますが、この規模ですとちょっと厳しいですね。
このフローチャート全体がExcelApplicationScopeの中にあるという理解であっていますでしょうか?
111162
(おんじ おたま)
16
こんにちは
上にあります、2つの画像についてはExcelアプリケーションスコープの画像と設定になります。
最後に送らせていただいた画像の[繰り返し]につきましては、繰り返しの中にフローチャートを入れた画像になります。
Yoichi
(Yoichi)
17
こんにちは
失礼しました。一枚目がEXCEL Application Scopeの中身だったのですね。
特段問題となるアクティビティはなさそうに思えますので、怪しそうな箇所をつぶしていくアプローチになるかと思います。
トライ&エラーになるかもしれませんが、
例えば
・ブックを閉じるアクティビティは削除する。
・範囲を検索のA:Aの部分を具体的に指定してみる(ex.A1:A100等)
の両者を反映して試してみる等が考えられるかと思います。
111162
(おんじ おたま)
18
こんにちは
トライ&エラーになってしまいましたが、下記内容で行いました。
1つ通して数時間かかるため、テストは各トライに対して3回ほど実施。
- 全ブックを閉じるを排除:[NG]
やはりバックグラウンドに残ってしまう。
- 範囲を指定を狭める:[NG]
同じくバックグラウンドに残ってしまう。
- PowerShellにてバックグラウンド[EXCEL.EXE]を削除:[OK]
今まで行ったブックを閉じるを排除した分、アクティビティ数は削減。
懸念される点は、PowerShellをExcelアプリケーションスコープ分配置する為、
アクティビティ数が±0になる。
現在は、ブックを閉じるをアプリケーションスコープ外に設置して実施中になります。
また、そのほかにExcelアプリケーションスコープのオプション可視化と自動保存を[有]を実施予定しています。
111162
(おんじ おたま)
19
こんにちは
トライ&エラーを繰り返してやっと謎が解決致しましたので、報告させて頂きます。
まずは、ご協力やご意見をしてくださった方に感謝を申し上げます。
本当にありがとうございました。
そして、申し訳ありませんでした。
原因は、UiPathではありませんでした。
正式な原因は、自社ソフトからExcelデータファイルを取得した際に、Excelファイルを[アプリケーションを閉じる]を使用して、画面上のExcelアプリケーションが閉じられていたのですが、バックグランドでは残り続けてたことです。
しかし、次のExcelアプリケーションスコープ終了までは、動作を続けていた為、問題点を見つけることができていませんでした。
また、Excelアプリケーションスコープを使用したかったのですが、抽出したときはファイルパス不規則で指定できない為、アプリケーションを閉じるを使用していました。
自分の力不足ゆえに、ご迷惑をおかけしました。
ちなみに回避策としましては、抽出後にバックグランドのEXCEL.EXEをPowerShellにて強制終了を行うのみで問題ありませんでした。
また、このことから分かる通り、PowerShellでは問題なかったのに対して、他のアクションでは解決しないということで、バックグランドに何かしらのEXCEL.EXEが残り続けていたことになりました。
皆さんはあるかわかりませんが、Excelファイルを抽出した際には注意してみてください。
(特にバックグランド…。)
それと [ ExcelWorkbookScope ]については、UiPathサポートに問い合わせたところ
下記回答を頂きました。
ExcelWorkbookScopeはExcelアプリケーションスコープアクティビティに依存するクラス(プロパティ)となります。そのため、Excelアプリケーションスコープ内で使用できるという意味だと存じます。
以上、皆さん本当にありがとうございました。
色々と勉強になりました。
3 Likes