Blue PrismでExcelを操作する<詳細版⑤> Excelの列を入れ替える
俺、こんな仕事をするキャラじゃない…というか、
もう休みに入って、ビール飲みながらFAR CRY(オフライン)やってるのが、お似合いなんだよぉ。。
- 事前準備: スパイか、VBOか
- Excelから列の入れ替え対象の表データを取得する
- 列の値を交換する
- Read Collection Field
- Set Collection Field
- 列名を変える
- Rename Field
- コレクションをExcelに書き込む
- やってみた
- まとめ
事前準備: スパイか、VBOか
そもそも、Blue PrismでExcelを操作するには、大きく2つのアプローチがあります。
- Excelを一つのアプリケーションとしてとらえ、Launch/Attachしてスパイモードでidentifyする
- APIを使ったバックエンド連携、つまりExcel VBOを使う
Excelをスパイするアプローチは、たとえば以下のような動画で確認できます。
Excelの列を入れ替えるケースでも、どちらかのアプローチを選ぶ必要があります。
今回は、2.のアプローチ、つまりExcel VBOを駆使して列を入れ替えてみたいと思います。
Excelから列の入れ替え対象の表データを取得する
まず、Excelから列の入れ替え対象の表データを取得します。
BPA Object - MS Excel のアクション: Get Worksheet Range As Collection を使用します。
Get Worksheet Range As Collection の詳細は、こちらを参照してください。
この操作で、Excelの表を、Blue Prismのコレクションとして取得できます。
列の値を交換する
入れ替え対象の列名をColumn AおよびColumn Xとします。
- まず、Column AとColumn Xの値をそれぞれ取得します。
- 次に、取得したColumn Xの値をColumn Aへ、取得したColumn Aの値をColumn Xに移します。
- これを上から順番に行の数だけ繰り返します。
この操作では、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では何て呼ぶんだろう…)がリセットされるようです。
配列の添え字…は、以下のようなものです。
Blue Prismだと、配列の添え字を取る方法がない(はず)のですが、デバッグ実行時には見ることが可能です。
この添え字が、再帰呼出しをするとループ中にリセットされるというク〇…極めて個性的な挙動になります。
…いや、だって、ループ中に添え字をリセットされたらループが止まらなくなり、ループ回数が配列の上限に到達してエラーになっちゃうんだもん。。
こういうエラーね。
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 については、こちらを参照してください。
やってみた
フローの完成版はこちら。
こういうExcelが
こうなります。
動画はこちら。
やったぜ。
まとめ
- Excelの列の入れ替えは、標準VBOの組合せでできる
- このブログの既存の記事を切り貼りすることで、意外といろいろできる
- このブログがVBOの日本語ドキュメント(JavaでいうJavadoc)になる日は…ちょっと遠いな。そのうち、公式で日本語化されるだろうし
FAR CRYは3が好きです、、Blue Ocean的に考えて。。
終われ!仕事‼