こんにちは。ご無沙汰しております。たかはしです。
4月から所属先が変わり、ビジネスプラットフォームテクノロジーセンター(BPTC) になりました。

 

今回は、Blue Prism でExcel操作を行うために公式から提供されている標準オブジェクトのひとつ「MS Excel VBO」オブジェクトについて、お話をしていきたいと思います。

「MS Excel VBO」オブジェクトをはじめ、Blue Prism には様々な標準のオブジェクト(VBO / Visual Business Object) が用意されています。これらはインポートをすればすぐに使えるようになっていますが、意識をしなければどのようなつくりになっているかを確認する機会はあまりないですよね。

そこで、今回は「MS Excel VBO」の代表的なアクションについて、その中身を確認することで「MS Excel VBO」が実際はどのように動いているのか、その理解のきっかけを作っていきたいと思います。

使用ライブラリの確認

さて、まずは「MS Excel VBO」が利用しているライブラリについて、確認してみましょう。

ライブラリは、初期化(initialize)アクションの左上の四角をダブルクリックし、コードオプションを表示することで確認が可能です。

確認の結果、MS Excel VBOでは、以下のライブラリが追加されていることが分かりました。

  • System.Collections.Generic
  • System.IO
  • Microsoft.VisualBasic
  • System.Windows.Forms
  • System.Diagnostics
  • System.Text
  • System.Threading
  • System.Runtime.InteropServices

また、コードステージはVisual Basic(VB.NET)で書かれているということも、この画面から確認できますね。

「Create Instance」アクション

「MS Excel VBO」が利用しているライブラリを確認したところで、実際にアクションの中身を見ていきたいと思います。

Blue Prism でExcelを操作する際に最初に何をするかというと……そう、インスタンスの生成ですね。「MS Excel VBO」では、「Create Instance」と呼ばれるアクションを呼び出すことで、インスタンスを生成することができます。

このアクション実行時に返却される変数「handle」を活用することで、「MS Excel VBO」の他のアクションでも同じExcelを操作することが出来るようになっています。

では早速、「Create Instance」の中身を見てみましょう。

アクションの変数として、数値型の「handle」とフラグ型の「Enable Events」が定義されています。

アクションを実行すると、まずは「Create Instance」という名前のコードステージが呼び出されるようになっています。中身を見てみると、入力はなく、出力として「handle」が返却されるステージのようですね。

コードタブを確認すると、VB.NET で記載されたコードが確認できます。
コードの内容は、CreateObject 関数を呼び出してExcelアプリケーションのオブジェクトを生成。生成したオブジェクトの Handle を GetHandle 関数で取得して返却しているようです。処理内で作成されている GUID は、後にインスタンスを強制終了するために必要だとコメントアウトされた文章で記載されています。

その後、「Set Events Enabled」でイベントの有効/無効を切り替えて処理終了です。

「Get Worksheet As Collection」アクション

さて、もうひとつだけ見ていきたいと思います。

「Get Worksheet As Collection」アクションは、ワークシートの内容をコレクションに格納する、「MS Excel VBO」でもよく使用するアクションの一つです。
インプットとして「Create Instance」アクション実行時に返却された「Handle」、Excelのファイル名、シート名を渡すことで、指定したシートに記載されているデータがコレクション型で返却されます。

では、実際に「Get Worksheet As Collection」の中身を見ていきましょう。

アクションの変数として、数値型の「handle」、テキスト型の「workbookname」「worksheetname」、フラグ型の「sheetexists」、コレクション型の「worksheetcollection」が定義されています。
「handle」「workbookname」「worksheetname」はインプット引数、「worksheetcollection」はアウトプット引数として使用されています。

処理の流れとして、まずは「CheckInstanceAndWorkbook」ページを呼び出し、指定された「Handle」および「Workbookname」が存在するかを確認します。ここで「Handle」もしくは「Workbook」が存在しない場合、例外が返却されます。
次に、コードステージ「GetWorksheetAsCollection」を呼び出します。このコードステージで、シートの内容をコレクションに格納しています。また、シートが存在しない場合「sheetexists」の値にFalseが格納されます。「GetWorksheetAsCollection」コードステージの後、最後に「sheetexists」の値を確認し、値がFalseであれば例外を返却します。

では、実際にコードステージの中身を見てみましょう。
入力は数値型の「handle」、テキスト型の「workbookname」「worksheetname」、出力はコレクション型の「worksheetcollection」とフラグ型の「sheetexists」です。

記載されたコードを見てみましょう。

最初に、GetWorksheet関数でワークシートオブジェクトを作成します。この時、ワークシートオブジェクトが作成できなかった場合は指定されたシートが存在しないとして「sheetexists」に False を代入し処理を終了します。
ワークシートが存在した場合は、以下の動作でクリップボードにワークシートの情報を格納します。

  1. ワークシートをアクティベート
  2. シートの使用範囲を全て選択
  3. 選択内容をコピー

その後、テキストとして変数Dataに代入し、その後、ParseDelimSeparatedVariables関数を用いてコレクション型に変換しています。

おわりに

今回は、Blue Prism標準のVBO 「MS Excel VBO」オブジェクトについて代表的なアクションの中身を見てみましたが、いかがでしたでしょうか?
「MS Excel VBO」オブジェクトには、他にもたくさんの便利なアクションが実装されています。興味のある方は、ぜひ確認してみてください。
応用として、実装されていないアクションを上記の内容をヒントに新しく作成してみる、というのも面白いかもしれませんね。