(O+P)ut

ITエンジニアのアウトプット録



(O+P)ut


【BluePrism】The collection definiton does not contain field Colmn1というエラー回避

事象

以下のアクションにてExcelファイルからコレクションを取得する際に

ビジネスオブジェクト MS Excel VBO
アクション Get Worksheet as Collection Offset

以下のエラーメッセージが表示されてエラーとなる。

Internal : Collection fields are defined but cannot be matched to the incoming collection - The collection definition does not contain the field Column1.

解決策

ビジネスオブジェクト MS Excel VBO
アクション Get Number Of Rows

によって最終列番号を取得し

ビジネスオブジェクト MS Excel VBO
アクション Get Worksheet Range As Collection

にて範囲指定をしてコレクションを取得する。

補足

コレクションの取得対象のシートですが、セルの表がA1から始まってないケースではGet Worksheet as Collection Offsetを用いてオフセットを与えてやる必要があります。

例えば以下のようにExcel内にデータが格納されている場合は

A B C
1
2 Name Age
3 Ken 18
3 Emi 19

デフォルトでUse HeaderがTrueなので、Get Worksheet as Collection Offsetの入力オプションにて以下のように開始セルを指定します。

StartCell "B2"

本来はこれで値が格納されている範囲を自動的にコレクションに格納してくれるのですが、ケースによっては上記エラーが出ます。
「Column1」という列はそもそもコレクションには定義していないので、謎のセルを拾っているのだと思います。

その際、Get Worksheet Range As Collectionを利用するとエラーが解消しました。

ただしこのアクションはStartCellだけでなくEndCellをインプットとして入力する必要がある点のみご注意ください。*1

終わりに

Get Worksheet as Collection Offsetのコード部分を見てみましたがおそらく以下の判定で引っかからないセルがあるのだと思われます。

For i As Integer = 0 To fileds.length - 1
 If i < fields.Length Then
  row(i) = fields(i)
 Else
  row(i) = ""
 Next I

同一事象でお困りの方は、ご参考ください。

*1:例えば、解決策で示したように最終行のセルを数値データとして取得し、表の最終列の記号(上の例で言えば"C")と結合して"C" & Get Number Of Rowsの結果とすればEndCellに入力する変数が作成可能