『ワークフローファイルを呼び出し』で DataTable 型の変数を渡すと Null になる場合とならない場合があります

:grey_question: Question

『ワークフローファイルを呼び出し』アクティビティで DataTable 型の変数を渡すと、渡した先のワークフローで Null になる場合とならない場合があります。下図例のような値を入力した Excel ファイルを読み込んで DataTable 型の変数へ変換しています。原因と回避策を教えてください。

image

なお、ワークフロー内に配置している主なアクティビティのプロパティ設定状況は下図の通りです。

:bulb: Answer

原因

対応 OS が「Windows レガシ」である場合に発生する可能性があります。発生する場合としない場合の差は一番最初のデータ行で判断された型がそれ以降の行でも対応できる型か否かで分かれます。

例えば下図例では表示上は電話番号形式の文字列ですが実際の値は数値です。

image

2 行目は表示上も実際の値も電話番号形式の文字列です。

image

上図例のような Excel ファイルである場合、最初の行の B 列の値は数値であるため数値型の列であると判断されますが、2 行目では数値型として扱えない値であるため、問題発生条件を満たす Excel ファイルになります。なお、例えば最初の行の B 列の値が数値ではなく文字列である場合は条件を満たしません。

下図例のように『範囲を読み込み』アクティビティなどで「表示形式を維持」プロパティを有効にしていない場合は、後掲したデータを保持するデータテーブル型の変数になります。

[No.,Tel No.
1,8012345678
2,080-2345-6789
3,080-3456-7890
]

上記データを保持するデータテーブル型の変数を下図例のように『ワークフローファイルを呼び出し』アクティビティで「分離」プロパティを有効にしている場合は Null が渡されます。

解決策

問題を回避する方法は 3 つあります。下記いずれかの方法で回避することをお試しください。

A) Excel データの修正
下図例のように実際は数値となっている最初のデータを文字列へ修正します。

image

image

B) 「表示形式を維持」プロパティの有効化
下図例のように『範囲を読み込み』アクティビティなどで「表示形式を維持」プロパティを有効にします。

なお、実行結果は下図例のようになり、実際の値ではなく表示上の値が保持されます。

[No.,Tel No.
1,080-1234-5678
2,080-2345-6789
3,080-3456-7890
]

C) 「分離」プロパティの無効化
下図例のように『ワークフローファイルを呼び出し』アクティビティで「分離」プロパティを無効にします。

なお、実行結果は下図例のようになり、表示上の値ではなく実際の値が保持されます。

[No.,Tel No.
1,8012345678
2,080-2345-6789
3,080-3456-7890
]