.netのselect文に関して

2つのexcelがありkeyでマッチングをかけたいと考えています。

1 Excel application scope でA.xlsx呼ぶ
Read Rangeで読み込みdetatableをDT01に落とし込む

2 Excel application scope でB.xlsx呼ぶ
Read Rangeで読み込みdetatableをDT02に落とし込む
For each row
foreach row in DT02
データの有無を判定する
assgin
Vdata =
DT01.select(“ID= '” + row(0).ToString().PadLeft(7,"0"c) + “’”).Length
Vdataが1の場合、B.xlsxの項目"ID" と
A.xlsxの項目"row(0).ToString().PadLeft(7,"0"c) "があれば、 Vdata に1を返し、
B.xlsxの項目をA.xlsxの項目で更新する。

というものです。

IDは7桁なので、マッチングするとき0詰めをしています。

しかし、
assgin
Vdata =
DT01.select(“ID= '” + row(0).ToString().PadLeft(7,"0"c) + “’”).Length

でIDのカラムがありませんとなります。
色々考えましたがご教示いただければと思います。

A.xlsx->DT01
B.xlsx->DT02

とあり

B.xlsxの項目"ID" と
とあるため、IDの項目を持つテーブルはDT02と考えられます。

しかし、

DT01.select(“ID= '” + row(0).ToString().PadLeft(7,"0"c) + “’”).Length

とあるのですが、DT01(A.xlsx)にIDの列はありますでしょうか。

※テーブルの中身の確認は、デバッグ実行でブレークポイントを使用して、以下のように値の部分の虫眼鏡アイコンをクリックすることで、項目名と中身を確認することが出来ます。

1 Like

ありがとうございます。
カラムの名称でなく。read range するときのヘッダーの指定を誤っていました。
初歩的なことですみません。

1点教えていただきたいことがございます。
IDの値が数値で、アンマッチとなります。
もし可能であればご教示ください。
下記のように構文を変えたのですがうまくいきません。
DT01.select("’" + row(11).ToString().PadLeft(4,"0"c) + “’ = '” + row(0).ToString().PadLeft(4,"0"c) + “’”).Length

仕様的に正しくなるのかどうか分かりませんが、むしろ

DT01.select(“ID= '” + row(0).ToString() + “’”).Length

とするのはどうでしょうか。。

1 Like

ありがとうございます。
DT01.select(“ID= '” + row(0).ToString() + “’”).Length
で試しましたがアンマッチでした。
write lineで"ID"値を確認しました。
参照する値は落ちています。

row(0).ToString() << DT01の値をwrite lineで確認したいのですが
可能でしたがやり方ご教示ください。

よろしくお願いします。

DT01の中身はデバッグ時に虫眼鏡で見ることが出来ると思います。
※write lineでなければならない事情があるのでしょうか。。。

row(0).ToString()の中身はwritelineで見ることが出来ると思いますが。。

※現状のxlsxファイル(抜粋で加工してもらえばよいと思いますが。。)を上げていただくことは出来ないでしょうか。

sample.zip (14.6 KB)

B.xlsxを更新する部分はありませんが、判定する部分までのものを作成してみました。

何か認識違いがありますでしょうか。

手を煩わせ申し訳ございません。
参考にし問題なく動作しました。

ありがとうございます。

1 Like