自分へのメモ BluePrism Excelをオブジェクトとして操作する ジャンプ・範囲選択・並べ替え
Blue Prism Learning Editionのライセンス期間中に夜な夜な調べ物をしているブログです。
Excelをオブジェクトとして操作するサンプルその②を作ってみました。
試行錯誤中なので、たどり着いた方は参考程度でお願いしたく・・・
サンプルでやりたいこと
Excelの中にある表のデータを並べ替えしたい。
どうなんでしょう・・・MS Excel VBOを拡張してやるのがいいんでしょうか?
それともExcelをオブジェクトとして操作するのがいいんでしょうか?
とりあえずこのサンプルではExcelをオブジェクトとして扱って実現しています。
オブジェクト
Attach ⇒ Windowを最大化 ⇒ ジャンプ(Ctl+G)指定したセルに移動 ⇒ 表を選択 ⇒ メニューのデータ/並べ替えで並べ替えを実施⇒A1に戻っって終了です。
Windowを最大
WindowはExcelのアプリケーション全体をWin32モードでスパイした要素になります。
最大化した理由ですが、のちにメニューからデータ、並べ替えを選択した際、「並べ替え」のメニューがWindow内に見えていないと、操作に失敗するため、事前に全画面にしています。Spyの仕方で回避できるんでしょうか??
↓画面が小さすぎで「並べ替え」がなくて操作に失敗した例
ジャンプ(Ctl+G)
今回操作するExcelは「B2:C9」に表があるため、B2に移動したいです。
「B2」セルを要素としてグローバルマウスクリック(中央)のアクションを実施した場合、B2セルがWindowの表示範囲内にあればうまく動きましたが、表示範囲外にある場合、エラーが発生しました。
というわけでジャンプでセル移動。
Global Send Keyではうまくいかず、Global Send Key Eventでうまくいきました。
Excelでショートカットキーの送信は全般的にGlobal Send Key Eventならうまくいく感触です。
ジャンプWindowの参照先を設定
ジャンプWindowの参照先(R):の既存の値を消去して、移動したいセル”B2”を設定します。
ここもGlobal Send Key Eventです。
Writeステージを使えそうですが、なぜかことごとくうまくいきませんでした。
なぜ・・・?
Global Send Key Event(グローバルキーイベント送信)の値は
いっこめ:"{Delete}"
にこめ:"B2"
ジャンプWindowのOKボタン押下
Ctl+Aで表を選択
Global Send Key Eventで"<{CTRL}A>{CTRL}"。
メニューの「データ」をクリック
「並べ替え」をクリック
最優先されるキークリック
最優先されるキー年齢の右にある▽をクリック
最優先されるキーを選択
最優先されるキーのプルダウンは、UIA名をDynamicとして定義。
グローバルマウスクリック(中央)のパラメータでソートキーにする「年齢」を設定。
並べ替えOK
A1に戻る Ctl+Home
最後もGlobal Send Key Eventで"<{CTRL}{Home}>{CTRL}"です。