DataTableの行を他のDataTableに追加する方法

DataTableの行を抜き出して他のDataTableに追加を「データ行を追加(Add Data Row)」アクティビティで行おうとしています。
しかし、「データ行を追加: この行は既に別のテーブルに属しています。」のエラーが出てしまいます。
2つのDataTableは別ものですが、カラム数・カラム名は同じです。
簡単そうなので出来るはずと思っているのですが、原因がつかめません。
ご指導よろしくお願いいたします。

hey
it’s showing the error cause you have the same column names!
change column names,and try!
@196006

1 Like

Main.xaml (10.7 キロバイト) sample.xlsx (19.8 キロバイト)

サンプル置いておきます。
B表シートの中身を行単位でコピーしてA表へ追加しています。

2 Likes

ビルドデータテーブルを使用した場合、同じ列名が使用されます。
または、同じデータテーブルに類似した列名が含まれていないことを両方のデータテーブルで確認します

ご回答ありがとうございます。
1つ教えていただければ幸いです。
ビルドデータテーブルを2つ使って2つのデータテーブルを作っております。出力データテーブルは違う名前にしてるものの、テンプレート(カラム名、カラム数)は同じにしております。
これがまずいのでしょうか?

@ 196006さん

DataTable型は、行位置を指すポインタ部分と、データの実体が格納されている部分とで構成されていると思っています。

本来のテーブルにある行をそのままコピーしてしまうと、行位置を指すポインタがそのまま別のテーブルで参照されてしまうことになり、本来のテーブルと混雑してしまいます。ですので、「この行は既に別のテーブルに属しています」と解釈しています。

これは、自分でテーブルを定義して、NewRowしたDataRow型の領域を使いまわしした時に、全行が最後に設定した内容になってしまった事があったので、そう思ったのでした。

カラム名、カラム数が同じでしたら、データフィルタなどを使って追加するデータ行を抽出し、データをマージで足してあげるのも簡単かと思います。

2 Likes

Invoke MethodアクティビティでImportRowではどうでしょうか。

@196006 さんと同じ手法で悩んでInvoke Methodで解決した方もいるみたいです。
https://reconomical.co.jp/case/2019/10/12/2260/

1 Like

tatemit様
ご指導ありがとうございます。
ご紹介いただいたHPを私も昼頃見つけ、Invoke Methodを使ってみました。
しかし、部分的にデータが欠損(特定のカラムだけコピー出来ていない。)する現象が発生し、断念しました。
18カラムあるうちの特定の5カラムが欠損(null)しました。
原因がつかめませんでした。

INVOKE WORKFLOWは、呼び出し都度、XAMLファイルをLOADINGするので、時間がとってもかかりますよ。ですので、データ行の回数INVOKE WORKFLOWするとなると、結構な時間になってしまいます。

1 Like

HANACCHI様
いつもご指導ありがとうございます。
時間がかかるのは、困りものです。
今回12万行の処理だったので使わなくてよかったです。

1 Like

662901d922ff93e811a4様
ご指導ありがとうございます。
早速使わせていただきました。
希望の動作をさせることが出来ました。

1 Like

This topic was automatically closed 3 days after the last reply. New replies are no longer allowed.