事象
以下のアクションにて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に入力する変数が作成可能