Help us understand the problem. What is going on with this article?

【UiPath】作業前後のスクリーンショットをExcelシートに貼り付ける

More than 1 year has passed since last update.

ロボットにアプリケーションへのデータ登録作業をさせる場合、人間が後で作業結果を確認できるよう
作業の前後それぞれのスクリーンショット(画面コピー)を撮って保存する必要があると思います。

よくあるのが、Excelの申請書に沿ってデータ登録させたら
1. PrtScキーでスクリーンショットを撮って
2. Excel申請書ファイル自体にシート追加して
3. Ctrl+Vでシートにスクリーンショット貼り付けて
4. Excel申請書を履歴フォルダに保管
ですが、UiPathは意外とコレに苦戦する!

詳細を説明します。

1.UiPathでのスクリーンショットの撮り方

Send HotkeyでPrtScキーを送り込んで終わりでしょ?
じゃないんだよね、Send HotkeyにPrtScが無いから・・・
PrtSc.png

その代わり、Take Screenshotという直球のアクティビティがあるんだけど
Take.png
これだとクリップボードに保持してくれないのでCtrl+Vで貼り付けられない。
Outputの型は"Image"だから、Save Imageアクティビティで画像ファイルとしてしか保存できない。
Excelに貼り付けたいんだよね…良いやり方がないか調べてみました。

Invoke Method

一番スマートなのがInvoke Methodで SendKeys.SendWait メソッド を呼ぶ方法。
Invoke.png
TargetTypeはSystem.Windows.Forms.SendKeysなので、プルダウンの[Brows For Types...]から検索。
sendkeys.png
プロパティのParametersで"{PRTSC}"を指定すれば、PrtScキーを送り込んで
アクティブな(=最前面の)アプリケーションのスクリーンショットを撮ってくれます。
※画面全体のスクリーンショットが欲しい場合は"^{PRTSC}"のように、先頭に^を付けます。
param.png

スクリーンショット取得アプリの利用

Snipping Toolとか、Capture XPとかWinShotとか世の中に山ほどスクリーンショット取得アプリがあるので、
それを起動して撮るのも1つ・・・というかコッチの事例の方が多数派かもしれない。
(プログラマーじゃない人にInvoke Methodを使えよって言ってもね…)

Take Screenshot + Clipboard.SetImage

hanageroidoさんのアドバイスによる第三の案。
最初にTake Screenshotアクティビティは"Image"を返すだけでクリップボードに入れてくれない
という話をしましたが、だったらClipboard.SetImageでクリップボードに入れてしまえ、というもの。
Invoke methodでTargetType = System.Windows.Forms.Clipboard、MethodName = SetImage
setimage.png
パラメータの型はSystem.Drawing.Imageで、ValueにはTake Screenshotから受けたImage変数。
paramimg.png
これでクリップボードに入るので、Ctrl + Vで貼り付けられるようになりました。

2.Excelにシート追加

Add Excel Sheetアクティビティもありそうで無いんだよね…

Shift + F11でシート追加

ベタですが、Excelのショートカットキーでシート追加。シート名を指定できないのが欠点。
hotkey2.png
後はCtrl + Vでスクリーンショットを貼り付けて、Save Workbookでシート保存すれば完了。

Invoke Method

シート名まで指定して追加したい場合はInvoke Methodで
Excel.WorkbookApplication.SetSheet(String sheetName, Boolean createNew)
を呼ぶ。
invoke2.png(xlsWorkbookはExcel申請書のWorkbook変数)

Parametersの1つ目はシート名、2つ目はTrueにすれば新規シート追加。
param2.png
シート追加の後は同様にCtrl+Vして、Save Workbookで保存。


今回はここまで。
UiPathは意外と痒いところに手が届かず、Invoke Method頼みなところがあるんだよね…

Continueのように気づいたら追加でアクティビティ実装されてたりすると嬉しいんだけど。
※去年までは「なんでBreakはあるのにContinueが無いんだ!」と世界中でツッコまれてました。

UmegayaRollcake
UiPath Academyの外堀を浅く埋める形でUiPathネタを書いていこうと思ってます。
https://www.youtube.com/channel/UCdo1xFEK-wRiVIQDs2cdvUg
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away