はこふぐのメモ

めもです

自分へのメモ BluePrism ファイルのコピー(拡張子を指定してコピー)

Utility - FileManagementを使ったファイルコピーの簡単なサンプル。

 

プロセス

SrcDirにあるExcelファイル「*.xlsx」、Wordファイル「*.docx」をSrcDirにコピーしています。

 

f:id:sazanamifugu:20191216231212p:plain

 

Utility - FileManagement Get Files

フォルダをダ指定して、その中にあるファイルのリストをコレクションとして返します。

 

★INPUT

f:id:sazanamifugu:20191216231440p:plain

Folder:対象のフォルダ

Pattern CSV:カンマで区切ったワイルドカードでの指定

 

Pattern CSVには「*.xlsx,*.docx」と指定しています。

f:id:sazanamifugu:20191216231733p:plain

すべてのファイルを取得したい場合は「*」または「*.*」を指定。

 
★OUT

f:id:sazanamifugu:20191216231915p:plain

Succes:成功したかどうかのFlag

Message: 失敗の場合のエラーメッセージ

Files:指定したフォルダでPattern CSVにマッチしたファイルのリスト

 

Filesには、

・Path (フォルダ+ファイル名)

・Folder(フォルダだけ)

・Name(ファイル名だけ)

・Extension(拡張子だけ)

・Read Only (読み取り専用かどうか)

・Bytes (Byte数)

のほか、作成日時、更新日時などの情報が含まれています。

f:id:sazanamifugu:20191216232106p:plain

サンプルにはないですが、Successはチェックしたほうがいいですね。

 

取得したFilesコレクションをループでまわしてコピーします。

Utility - FileManagement Copy File

f:id:sazanamifugu:20191216233203p:plain

FilePath:ファイルのフルパス(Get Filesで取得したFilesのPathを指定)

Destination Path:コピー先のディレクトリを指定

 

 

GetFoldersというアクションでフォルダ配下のサブフォルダのリストも取得できます。

しかし、サブフォルダ配下を含めてフォルダ丸ごとコピーをワンアクションでやってくれるアクションはなさそう・・・

 

 

自分へのメモ BluePrism Clipboard操作とExplorerのアドレスバーの操作

Clipboard関連のアクションはこちらにあった。

Utility - Environment::Set Clipboard クリップボードに値を設定

Utility - Environment::Get Clipboardクリップボードから値を取得

Utility - Environment::Clear Clipboard クリップボード

 

で、やりたかったのはExplorerのアドレスバーにフォルダのフルパスを入力してそのフォルダに移動すること。

(このアドレスバーが厄介で書き込み可能なものとしてSpyできなかった・・・やり方の問題?!)

 

f:id:sazanamifugu:20191210223604p:plain



実装方法の一つとして、以下のやり方でできた。

①アドレスバーを右クリック

②出てきたメニューからアドレスの編集を選択 

⇒ アドレスバーが編集可能状態になる

f:id:sazanamifugu:20191210223646p:plain

③Utility - Environment::Set Clipboardでクリップボードにフォルダのフルパスを設定

④Global Send KeyでCtr+vを送り、アドレスバーにクリップボードを張り付け&Enterで目的のフォルダに移動。

 

オブジェクト アクション例

f:id:sazanamifugu:20191210224029p:plain


global Send Keyのテキストは

"^v"

"{ENTER}"

f:id:sazanamifugu:20191210224320p:plain

f:id:sazanamifugu:20191210224335p:plain

 

 

自分へのメモ BluePrismでZIPファイルを解凍する(powershellを使う)

BluePrismでZIPファイルを解凍したい。

powershellでいけそうだ。

 

powershellでコマンドを起動するには、Utility - Environment のRun Process Until Endedがよさそう。

 

f:id:sazanamifugu:20191209234410p:plain

Application⇒powershellの場所を指定

"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe"

Arguments⇒powershellのコマンドを指定

"Expand-Archive -Path c:\Study\data.zip -DestinationPath c:\Study\work -Force"

 

自分へのメモ BluePrismでZIPファイルを解凍する(&コードステージを使う前準備)

blueprismでZIPファイルを解凍したい。

アプローチはいろいろありそうだけど、コードステージを使ってやってみた。

 

VB.NETで圧縮解凍を行う場合は、以下の関数を使う
 
'圧縮
System.IO.Compression.ZipFile.CreateFromDirectory()
'解凍
System.IO.Compression.ZipFile.ExtractToDirectory()

こちらのページによると、

docs.microsoft.com

ZipFile Classは

Namespace:
System.IO.Compression
Assemblies:
System.IO.Compression.ZipFile.dll, System.IO.Compression.FileSystem.dll, netstandard.dll

 

とのこと。

そんなわけで、オブジェクトの初期化ページのこの部分をダブルクリックし、

f:id:sazanamifugu:20191209231802p:plain

 

外部参照にAssenbliesに記載のDLL、名前空間にNameSpaceを指定する。

f:id:sazanamifugu:20191209231838p:plain

(そういうことだったのか・・・)

オブジェクト自体はとても簡単で

f:id:sazanamifugu:20191209232218p:plain

f:id:sazanamifugu:20191209232246p:plain

 
System.IO.Compression.ZipFile.ExtractToDirectory( _
File, _
ExtractPath)

 

File⇒解凍したいZIPファイルを指定

ExtractPath⇒解凍先を指定

 

(本当に標準VBOとしてないんだろうか・・・?File Managementあたりにあってもいいんじゃないだろうか・・・)

自分へのメモ Key、ValueのConfigファイルを読み取り、Collection.Keyの形式でValueを扱えるようにする

 

こちらのブログを参考にさせていただいて、

www.ebocean.work

 

こんな感じのKey、Valueの表から

f:id:sazanamifugu:20191208231518p:plain

 

以下のような、Keyをカラム名にしたCollectionに変換するオブジェクトを作ってみた。

f:id:sazanamifugu:20191208232226p:plain

Keyをカラム名とした1行のCollectionに変換することで、[Collection.Key]の形式でValueを取得することが可能。

 

作成したオブジェクトはこちら。

f:id:sazanamifugu:20191208233727p:plain

 

Collection ManipulationのAppend Field、Append Rows to Colletionは曲者っぽい。

先ほどのブログで詳しく解説されているけど、Collectionの初期化処理を行うことで魔法のように動的なCollection作成が可能になる~!

 

f:id:sazanamifugu:20191208235202p:plain

 

f:id:sazanamifugu:20191208235300p:plain

 

f:id:sazanamifugu:20191208235348p:plain

 

自分へのメモ BluePrism InernetExplorerでファイルをダウンロードして保存する

IrnetExplorerでファイルをダウンロードして保存するサンプルを作ってみた。

#試行錯誤中です。

 

サンプルの内容

IneternetExplorerで「~を開くか、または保存しますか?」の表示が出ている状態から、「名前を付けて保存」を実施する。

 

f:id:sazanamifugu:20191201223915p:plain

 

プロセス

(Attach省略していますが、実際にはAttachが必要)

www.ebocean.work

f:id:sazanamifugu:20191201223825p:plain

 

アプリケーションモデラー

InternetExplorerを定義する。

以下を参考にすると、それまで操作していた画面とは別途定義したほうがよさそう。

保存ボタンなど、それぞれのパーツもWin32またはUIオートメーションモードでスパイ。

(このあたりがよくわからない。どういう場合にどのモードがいいのか、いければどちらでもいいのか)

 

ダウンロードの通知のところ

f:id:sazanamifugu:20191201160332p:plain

f:id:sazanamifugu:20191201231042p:plain

保存ボタンの右の▼

f:id:sazanamifugu:20191201231403p:plain

f:id:sazanamifugu:20191201231433p:plain


名前をつけて保存

f:id:sazanamifugu:20191201231559p:plain

f:id:sazanamifugu:20191201231625p:plain


名前を付けて保存Window

f:id:sazanamifugu:20191201231739p:plain

f:id:sazanamifugu:20191201231951p:plain

 

名前を付けて保存の確認ダイアログ

同名のファイルがある場合に表示される

f:id:sazanamifugu:20191201232444p:plain

f:id:sazanamifugu:20191201232536p:plain

そのOK

f:id:sazanamifugu:20191201232556p:plain

ダウンロード後の通知の「ファイルを開く」ボタン

※ダウンロードの完了を検知するために待機ステージで使用

f:id:sazanamifugu:20191201232625p:plain

f:id:sazanamifugu:20191201232730p:plain

×ボタン

f:id:sazanamifugu:20191201233002p:plain

 

プロセスについて

・ほとんどの操作は要素に対してGlobalMouceClick(Centre)

・それぞれのダイアログやWindowが表示されるのにちょっと時間がかかるようで、それぞれの待機末ステージを入れたほうがよさそう。

・AttachするWindowTitleと保存先をパラメータにすれば共通的につかえるようになるんでは

自分へのメモ BluePrism ブラウザのAttachがうまくいかない

InternetExploreでAttachしたいだけなのにはまってしまった。

 

IEを立ち上げてとあるURLにアクセス。

それからWindow Titleを指定してAttachしてみるとエラー。

「内部 : ページ 'アクション1' の操作ステージ 'Attach'でステップ1を実行できませんでした - 複数のアプリケーションが基準に一致しました」

 

タブは一つだけなのに・・・なぜ・・・!

タスクマネージャで見てみると、確かにiexplorerのプロセスが二つある。

 

わかったこと

・IEはタブを増やすとプロセスも増える(でもタブ1つなら2プロセス、でもタブ2つでも2プロセスの時もある。よくわからない)

・ブラウザ自動化ガイド(BROWSER AUTOMATION GUIDE (JAPANESE))にこんな記載あり「IEはプライマリで起動されたプロセスから生成された別のプロセスで実行できる機能があるのでアタッチが困難になる場合がある(やっぱりトラップあるんだ!)

回避策として以下がある「Child Indexを使う」「TabProcGrowthを使う」

 

さらに、いつもお世話になっているサイトにズバリの記事を発見。

www.ebocean.work

 

ひとまずはChild Indexに0を設定することでひとまずのAttachはうまくいきそうな予感。

f:id:sazanamifugu:20191129000040p:plain

さらに、上記ブログに言及があるけど、Child Indexに0以外を指定すれば2番目、3番目のタブを操作できるかと思いきや、HTMLモードでスパイできなくなり、焦った!

 

 

 

 

 

 

 

 

自分へのメモ BluePrism MS Excel VBOでシートの削除・移動 Delete WorkSheet/Move WorkSheet

明日のために夜な夜な調べ物をするブログです。

 

BluePrism MS Excel VBOでシートの削除・移動行うサンプルです。

 

シートの削除 Delete WorkSheet

サンプルプロセス

Sample1.xlsxから「SheetB」シートを削除します。

f:id:sazanamifugu:20191127223550p:plain

 

Delete Worksheet

f:id:sazanamifugu:20191127223725p:plain

入力

handle⇒いつもの

Workbook Name⇒削除対象のファイル名。入力しない場合はそのときアクティブなWorkbookが対象になる。

Worksheet Name⇒入力しない場合はそのときアクティブなシートが対象になる。

 

存在しないシート名を指定した場合は、Exceptionが発生します。

f:id:sazanamifugu:20191127223925p:plain

シートの移動 Move WorkSheet

いわゆる「シートの移動またはコピー」です。

サンプルプロセス

Sample1.xlsxの「SheetB」シートをSample2.xlsxの2番目にコピーします。

f:id:sazanamifugu:20191127224036p:plain

Move WorkSheet

f:id:sazanamifugu:20191127224540p:plain

入力

Handle いつもの

Source Workbook コピー元のファイル名

Source Worksheet    コピー元のシート名

Destination Workbook コピー先のファイル名

Destination Position コピー先のファイルの何番目に挿入するか(1始まり)

Copy ⇒ The true or false flag to decide if the moved worksheet will be copied.True: コピー(元ファイルにシートを残す)Flase:移動(元ファイルにシートを残さない)

 

ちなみにSource WorkbookとDestination Workbookに同じファイルを指定してCopyをTrueにすると、シート名(2)のようにシートが追加されます。

f:id:sazanamifugu:20191127225253p:plain

 

Rename WorkSheetはないんだね・・・!

 

 

 

 

自分へのメモ BluePrism Excelをオブジェクトとして操作する ジャンプ・範囲選択・並べ替え

Blue Prism Learning Editionのライセンス期間中に夜な夜な調べ物をしているブログです。

 

Excelをオブジェクトとして操作するサンプルその②を作ってみました。

試行錯誤中なので、たどり着いた方は参考程度でお願いしたく・・・

 

サンプルでやりたいこと

Excelの中にある表のデータを並べ替えしたい。

どうなんでしょう・・・MS Excel VBOを拡張してやるのがいいんでしょうか?

それともExcelをオブジェクトとして操作するのがいいんでしょうか?

とりあえずこのサンプルではExcelをオブジェクトとして扱って実現しています。

 

オブジェクト

Attach ⇒ Windowを最大化 ⇒ ジャンプ(Ctl+G)指定したセルに移動 ⇒ 表を選択 ⇒ メニューのデータ/並べ替えで並べ替えを実施⇒A1に戻っって終了です。

 

f:id:sazanamifugu:20191126220729p:plain

Windowを最大

f:id:sazanamifugu:20191126221819p:plain

WindowはExcelのアプリケーション全体をWin32モードでスパイした要素になります。

f:id:sazanamifugu:20191126221931p:plain

 

最大化した理由ですが、のちにメニューからデータ、並べ替えを選択した際、「並べ替え」のメニューがWindow内に見えていないと、操作に失敗するため、事前に全画面にしています。Spyの仕方で回避できるんでしょうか??

↓画面が小さすぎで「並べ替え」がなくて操作に失敗した例

f:id:sazanamifugu:20191126222519p:plain


ジャンプ(Ctl+G)

今回操作するExcelは「B2:C9」に表があるため、B2に移動したいです。

「B2」セルを要素としてグローバルマウスクリック(中央)のアクションを実施した場合、B2セルがWindowの表示範囲内にあればうまく動きましたが、表示範囲外にある場合、エラーが発生しました。

というわけでジャンプでセル移動。

f:id:sazanamifugu:20191126223528p:plain

Global Send Keyではうまくいかず、Global Send Key Eventでうまくいきました。

Excelでショートカットキーの送信は全般的にGlobal Send Key Eventならうまくいく感触です。

 

ジャンプWindowの参照先を設定

ジャンプWindowの参照先(R):の既存の値を消去して、移動したいセル”B2”を設定します。

f:id:sazanamifugu:20191126223801p:plain

 

ここもGlobal Send Key Eventです。

Writeステージを使えそうですが、なぜかことごとくうまくいきませんでした。

なぜ・・・?

f:id:sazanamifugu:20191126224021p:plain

Global Send Key Event(グローバルキーイベント送信)の値は

いっこめ:"{Delete}"

にこめ:"B2"

 

ジャンプWindowのOKボタン押下

f:id:sazanamifugu:20191126225422p:plain



 

Ctl+Aで表を選択

Global Send Key Eventで"<{CTRL}A>{CTRL}"。

f:id:sazanamifugu:20191126225422p:plain

 

 メニューの「データ」をクリック

f:id:sazanamifugu:20191126225748p:plain

「並べ替え」をクリック

f:id:sazanamifugu:20191126225812p:plain

 

最優先されるキークリック

最優先されるキー年齢の右にある▽をクリック

f:id:sazanamifugu:20191126225850p:plain

最優先されるキーを選択

最優先されるキーのプルダウンは、UIA名をDynamicとして定義。

f:id:sazanamifugu:20191126230136p:plain

グローバルマウスクリック(中央)のパラメータでソートキーにする「年齢」を設定。

f:id:sazanamifugu:20191126230418p:plain

 

並べ替えOK

f:id:sazanamifugu:20191126230644p:plain

 

A1に戻る Ctl+Home

最後もGlobal Send Key Eventで"<{CTRL}{Home}>{CTRL}"です。

f:id:sazanamifugu:20191126230755p:plain

 

 

自分へのメモ BluePrism CSVファイルのデータをCollectionに入れる

CSVファイルからデータを取得してCollectionに格納するやり方はいくつかパターンがありそうなのでサンプルを作ってみました。

 

その① File Management::Get CSV Text As Collection

f:id:sazanamifugu:20191125230839p:plain

入力パラメータ

f:id:sazanamifugu:20191125231025p:plain

CSV File Path ファイルのパス

First Line Is Header Trueにすると1行目をヘッダと認識し、1行目の内容をCollectionのカラム名に設定してくれます。

 

出力パラメータ

f:id:sazanamifugu:20191125231237p:plain

 

CSV Values 格納するCollection名

 

結果

f:id:sazanamifugu:20191125231436p:plain

 

このアクション、CSVファイルがSJISだとうまくいきますが、UTF8など別の文字コードだと文字化けしました。

その② File Management::Read All Text  from File ⇒ Utility-Strings::Get CSV Text As Collection

f:id:sazanamifugu:20191125231545p:plain

File Management::Read All Text  from Fileで一度ファイルから読み込んで文字列にしてから、Utility-Strings::Get CSV Text As CollectionでCollectionに格納しています。

このやり方の場合、元のファイルはUTF8だと文字化けせずいけました。

 

その③ MS Excel VBO :: Get WorkSheet As Collection

f:id:sazanamifugu:20191125232031p:plain

MS Excel VBOはCSVファイルも行けるようです。

SJISじゃないと文字化けしました。

 

 

 

プライバシーポリシー
©2019 はこふぐのメモ All rights reserved