Enterprise Blue Ocean ◮

神谷町RPAブログ

  • [特集] Blue Prism の製品概要がよくわかるWebページ動画取材記事
  • [特集] Blue Prism DX にある、Blue Prismの部品一覧はこちら
  • [特集] Blue Prism でExcelを操作する記事はこちら
  • [特集] Blue Prism のベストプラクティス記事はこちら
  • Blue PrismのQ&Aを掲示板(teratail)でやりませんか?

Blue PrismでExcelを操作する<詳細版⑤> Excelの列を入れ替える

俺、こんな仕事をするキャラじゃない…というか、

もう休みに入って、ビール飲みながらFAR CRY(オフライン)やってるのが、お似合いなんだよぉ。。

 

 

事前準備: スパイか、VBOか

そもそも、Blue PrismでExcelを操作するには、大きく2つのアプローチがあります。

  1. Excelを一つのアプリケーションとしてとらえ、Launch/Attachしてスパイモードidentifyする
  2. APIを使ったバックエンド連携、つまりExcel VBOを使う

Excelをスパイするアプローチは、たとえば以下のような動画で確認できます。

youtu.be

Excelの列を入れ替えるケースでも、どちらかのアプローチを選ぶ必要があります。

今回は、2.のアプローチ、つまりExcel VBOを駆使して列を入れ替えてみたいと思います。

 

Excelから列の入れ替え対象の表データを取得する

まず、Excelから列の入れ替え対象の表データを取得します。

BPA Object - MS Excel のアクション: Get Worksheet Range As Collection を使用します。

Get Worksheet Range As Collection の詳細は、こちらを参照してください。

ebo.hatenablog.com

この操作で、Excelの表を、Blue Prismのコレクションとして取得できます。

 

列の値を交換する

入れ替え対象の列名をColumn AおよびColumn Xとします。

  1. まず、Column AとColumn Xの値をそれぞれ取得します。
  2. 次に、取得したColumn Xの値をColumn Aへ、取得したColumn Aの値をColumn Xに移します。
  3. これを上から順番に行の数だけ繰り返します。

この操作では、Collection Manipulation のアクション: Read Collection Field で値を読み取って、アクション: Set Collection Field で値を書き込みます。

 

Read Collection Field

コレクションの特定の値(Excelでいうセル)を読み取ります。

Read Collection Fieldの入力

  • Row Index: 何行目か。最初の行は0でスタートします
  • Collection: 対象となるコレクション
  • Field Name: 列の名前です

Read Collection Fieldの出力

  • Value Read: 読み取った値です

 

Set Collection Field

コレクションに特定の値を(Excelでいうセルに)設定します。

Set Collection Fieldの入力

  • Row Index: 何行目か。最初の行は0でスタートします
  • Collection: 対象となるコレクション
  • Field Name: 列の名前です
  • New Value: 新しく設定する値です

Set Collection Fieldの出力

  • Updated Collection: 新たな値を設定されたコレクションです

 

なお、Set Collection Fieldでは、ループの中で再帰呼出し(入力のコレクションと出力のコレクションを同一にする)をすると、いわゆる配列の添え字(Blue Prismでは何て呼ぶんだろう…)がリセットされるようです。

配列の添え字…は、以下のようなものです。

detail.chiebukuro.yahoo.co.jp

Blue Prismだと、配列の添え字を取る方法がない(はず)のですが、デバッグ実行時には見ることが可能です。

この添え字が、再帰呼出しをするとループ中にリセットされるというク〇…極めて個性的な挙動になります。

…いや、だって、ループ中に添え字をリセットされたらループが止まらなくなり、ループ回数が配列の上限に到達してエラーになっちゃうんだもん。。

こういうエラーね。

f:id:EnterpriseBlueOcean:20181227201144p:plain

Internal : Could not execute code stage because exception thrown by code stage: The supplied row index falls outside of the valid range.

これを防ぐために、ループを回すためのコレクションを、複数の計算専用に用意しました。これなら、再帰呼出しで添え字がリセットされても、その添え字をループでは使わないので、安心です…Collection Manipulationって本当にクセがある個性的ですね

 

列名を変える

列を入れ替える…という話だったので、列名も変えておきましょうか。

Column AはColumn Xに、Column XはColumn Aに変えましょう。

Collection Manipulation のアクション: Rename Field が利用可能です。

 

Rename Field

コレクションの列名を変えます。

Rename Fieldの入力

  • Collection In: 列名を変える対象のコレクション
  • Field Name: 対象の列名
  • New Name: 新しい列名

Rename Fieldの出力

  • Collection Out:  列名が変わったコレクション

 

コレクションをExcelに書き込む

列が入れ替わったコレクションをExcelに書き込むには、Write Collectionを利用します。

Write Collection については、こちらを参照してください。

ebo.hatenablog.com

 

やってみた

フローの完成版はこちら。

f:id:EnterpriseBlueOcean:20181227203827p:plain

こういうExcelが

f:id:EnterpriseBlueOcean:20181227203842p:plain

こうなります。

f:id:EnterpriseBlueOcean:20181227203856p:plain

動画はこちら。

youtu.be

やったぜ。

 

まとめ

  • Excelの列の入れ替えは、標準VBOの組合せでできる
  • このブログの既存の記事を切り貼りすることで、意外といろいろできる
  • このブログがVBOの日本語ドキュメント(JavaでいうJavadoc)になる日は…ちょっと遠いな。そのうち、公式で日本語化されるだろうし

FAR CRYは3が好きです、、Blue Ocean的に考えて。。

終われ!仕事‼