10
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【EXCELアプリケーションスコープ】不要なEXCELプロセスが残ってお困りの方へ

Last updated at Posted at 2023-06-18

はじめに

  • 本記事は、EXCELアプリケーションスコープを配置し、アクティビティによるEXCEL操作等を自動化する中で、ロボット実行後に不要なEXCELプロセスが残ってしまうことでお困りの方向け の内容となっています。
  • 記事の内容は、個人の見解または確認結果であり、UiPath の公式見解ではありません。
  • UiPath.Excel.Activities は 2.5.4 バージョンで構成しています。(最新の 2.20.2 もEXCELアプリケーションスコープの上位版の説明として一部利用しています。)
    image.png

不要なEXCELプロセスってどうやってつくるの?

まず、大前提としてロボットが正常動作をしているケースでは、EXCELアプリケーションスコープで起動したEXCELプロセスはワークフロー終了時に同様に消えます(終了します)。
意図的に例外を発生させたとしてもワークフローが正常に実行された場合、基本的にはEXCELプロセスも同様に終了します。
じゃぁどうやれば発生させられるのか?
➤ Studio のデバッグ実行でわざと停止することで不要なEXCELプロセスを残せます!!(※EXCELアプリケーションスコープ利用時)

image.png

キャプチャの例では、EXCELアプリケーションスコープ(可視:True)により PID:10116 のEXCELプロセスが立ち上がり、デバッグ停止でEXCELプロセスと開いたEXCELファイルがそのまま残っている状態です。
この時点で EXCELプロセスと開いたEXCELファイルの関係性は切れている ため、EXCELファイルを手動で閉じてもEXCELプロセスは終了せず残り続けます。

image.png

不要なEXCELプロセスが存在する状態でロボット実行してもよいのか?

結論の前に、EXCELプロセスとロボット(UiPath)の関係性を追加で補足します。

起動するEXCELプロセス

パターン ロボット実行時の挙動
EXCELプロセスなし 新規でEXCELプロセスが1つ起動する
EXCELプロセスが1つ起動している 起動中のEXCELプロセス が利用される
EXCELプロセス複数起動あり 起動中の いずれかのEXCELプロセス が利用される

確認は「プロセスを取得」アクティビティの出力(System.Diagnostics.Process)から「繰り返し(コレクションの各要素)」で
PIDとファイル名、プロセス名(item.Id.ToString+" "+item.MainWindowTitle+" "+item.ProcessName)
を取得するかたちでおこなってます。

(複数起動ありの確認例)

新規のEXCELプロセスを複数立ち上げた状態.JPG
新規のEXCELプロセスを複数立ち上げた状態2.JPG
新規のEXCELプロセスを複数立ち上げた状態5.JPG
新規のEXCELプロセスを複数立ち上げた状態4.JPG
新規のEXCELプロセスを複数立ち上げた状態6.JPG
↑↑ちょっとわかりづらくてすみませんが、「test2.xlsx」を手動で起動してつくった PID:16560 ですが、確認時に拾ったアクティブウィンドウのファイル名は「test.xlsx」となっています。

なお、EXCELプロセスの複数起動は「/x」オプションを付与して EXCEL.EXE を実行すればOKです。

EXCELプロセスが複数起動した状態は好ましくない

次の様な問い合わせは UiPath また EXCEL に限らず発生します。
EXCEL.EXE が複数起動したままになってしまいVBAアプリが誤動作する

共通のライブラリを同時に操作する(ファイルのIOの排他制御が一番イメージしやすい)などは、一般的に予期しないエラーが生じやすいパターンです。
このため、EXCELアプリケーションスコープの上位版の 「EXCELファイルを使用」は『EXCELプロセススコープ』とセットで利用することが推奨されており、『EXCELプロセススコープ』のプロパティには既存プロセスに対するアクション指定のオプションもあります。 (オプションの参考記事🔗)

image.png

EXCELアプリケーションスコープの出力プロパティで WorkbookApplication というオブジェクトを生成して中身をのぞくと、「System._ComObject」という名前のCOMオブジェクトを確認することができます。

workbookのオブジェクトの中身.JPG

複数のEXCELプロセスが存在する際に、このCOMオブジェクトの操作に失敗する例(以下)などもある様です。
https://forum.uipath.com/t/excel-hresult-0x80010114/512990

どうしたら不要なEXCELプロセスが残らないようにできるの?

解決策1(推奨):モダンデザインの「EXCELプロセススコープ」アクティビティを利用する

「EXCELプロセススコープ」&「EXCELファイルを使用」を利用した場合、プロパティの「Excelファイルを開いたままにする」のチェックをONにした場合を除き、ワークフロー実行で対象のプロセススコープを抜けた段階でタスクマネジャーからEXCELプロセスは消えます。
なお、チェックをONにした際に、何等かの手当がされているのか、ワークフロー実行後に手動でEXCELファイルを閉じるとEXCELプロセスも一緒に消えます。(リレーションが保ててます!改善されてますね!

image.png

解決策2:「ワークブックを閉じる」アクティビティでEXCELプロセスを終了する

手元の挙動をみる限りでは、ワークフロー終了時のクローズ処理か何かでEXCELプロセスを切りにいってます。
可視のオプションを True にした状態で EXCELアプリケーションスコープ の後ろに待機などを入れてみてみてください。
本来スコープを抜けたタイミングでEXCELファイルが閉じる想定でしたが、実際に閉じたのはワークフロー終了時です。
このため、不要なEXCELプロセスの発生リスクを最小限にするには、スコープの直後などに「ワークブックを閉じる」アクティビティを挿入し、明示的にEXCELプロセスを終了するのが有効と考えられます。

image.png

解決策3(非推奨):「プロセスを強制終了」アクティビティでEXCELプロセスを終了する

既存のEXCELプロセスを終了させてよい場合に限り、ワークフローの冒頭に「プロセスを強制終了」アクティビティを挿入するのがよいでしょう。

image.png

おわりに

ロボット(UiPath)がEXCELの親プロセスではないため、制御元のロボットが最後まで実行されなかった場合に、
宙ぶらりんのEXCELプロセスが発生する可能性はあります。
とはいえ、例外制御も施されているワークフロー実行で同事象が頻繁に発生するということは考えにくいので、
再現性が高い場合などは、他のアプリケーションをトリガーにEXCELプロセスが起動していることも念頭に調査いただけますと幸いです。
最後までお読みいただきありがとうございます!('ω')ノ

10
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?