ああああ

データテーブルを作成してカラム名をセットする_UiPath★Tips

データテーブルを作成してカラム名をセットする_UiPath★Tips

データテーブルを作成するときに使えるアクティビティに、「データテーブルを構築(BuildDataTable)」があります。

このような画面でカラムを追加したりカラム名を自由に設定できたりと便利あアクティビティですが、一つだけ困ったことが…

カラム名に変数や引数をセットできないのです。。。

 

後の運用のことを考えると、シナリオ内のハードコーディングはできるだけ避け、シナリオ内で使用する名前や数値はできるだけConfig.xlsxファイル内に記載するのがベストです。

 

ということで、「データテーブルを構築(BuildDataTable)」アクティビティを使わずにデータテーブルを作成して、カラム名をセットする方法です。

 

 

まずは新しくデータテーブルを定義します。

System.Data.DataTable型の変数を作成し(ここでは inputDataTable)、「代入(Assign)」で新しいデータテーブルを定義するために、右辺には New DataTable を記載します。

Assignでなくても、画面下の変数リストで規定値の中に入力して定義するのでもOKです。

↓こんな感じ

 

次に、「繰り返し コレクションの各要素(ForEach)」をセットします。

「繰り返し コレクションの各要素(ForEach)」のコレクションには String型変数.Split(“,”.ToCharArray) を記載。
これは、変数の中の文字列を , (カンマ)で区切って文字配列にコピーするというものです。

ここでは、Configファイル内から文字列を持ってきたいので、

in_config(“ColumnName”).ToString.Split(“,”.ToCharArray) と記載。
Configファイルは、UiPathが提供しているRE Framework (Robotic Enterprise Framework)にも出てきますよね!

※Configファイルは別xamlでDictionaryに登録しているので、ここでは引数の in_config を用いています。

Configのエクセルファイルには、このように、カラム名にしたいテキストを ,(カンマ)で区切って記載しておきましょう。

 

configファイルでなくても、例えば代入(Assign)を用いてString型の変数にセットしても同じです。
(けど今回は、スタートがconfigに記載したものを持ってきたいというものだったのでconfigにしています…)

 

で、「繰り返し コレクションの各要素(ForEach)」のTypeArgumentは String です。

 

 

次に、ForEachの中に「データ列を追加(AddDataColumn)」をセットします。

 

「データ列を追加(AddDataColumn)」のTypeArgumentもStringです。

列名にForEachの要素の item 、データテーブルに先に新しく定義したデータテーブル(ここではinputDataTable)を入れます。

↑AddDataColumnのプロパティはこのようになりました。

 

これでデータテーブルは出来上がり!

できたか見ていたいので試しに1行書き込んでからかき出してみたいと思います。

 

ForEachの外に「データ行を追加(AddDataRow)」を追加します。

 

入力のデータテーブルには、行を入れたいデータテーブルの変数(ここでは inputDataTable)、

列配列には、今回は時間の列に今の時間を入れたいので、

{DateTime.Now.ToString(“yyyy_MM_dd hh:mm”)}

と入れてみました。

 

AddDataRowのプロパティはこんな感じ。

 

最後に、WriteRangeでエクセルに書き出してみます。

 

 

Configエクセルファイルにカンマで区切ったカラム名が入り、処理した日時が記載されているので完成です。

 

 

私もプロジェクトではRE Frameworkを元にしたFrameworkを用いているのですが、読み込むTransactionDataがなく、しかも1回しか処理を行わないということで、処理結果を書き込むだけのDataTableを作りたいな…というときに今回のDataTable作成&カラムセットの方法で処理を行いました。