列名と対応する値をディクショナリに追加したい

やりたいこと
下図の、1行目の項目名をコレクションのKeyに、5行目(行は不定)をValueに繰り返し追加したい
sample

データが縦ではなく横に入っているためForEachRowは使えず、列を繰り返しディクショナリに追加するにはどうしたら良いでしょうか?

itemの変数の型をdatacolumnとしたfor eachで行けます!コレクションには、データテーブル.columnsにします

この場合、キーには、item.columnnameで行けるはず!

ありがとうございます。

代入の左辺に、dictionary変数(item.columnname)
としてみましたが、「stringのメンバーではありません」とエラーになっています。
For eachのTypeArgumentはStringに設定しています。

また、重ねての質問となりますが、5行目の値をキーに設定するには代入の右辺になると思いますが、列の場合はどのように記述すれば良いでしょうか?

Stringではなく、DataColumnですね。

で、代入の右辺は、
DataTable.Rows(3).Item(Item).ToString
で、EXCELの5行目の値が設定されます(EXCELの1行目は、列名に。EXCELの2行目から、DataTableの0行目からになるため)

ありがとうございます。理解致しました。
ただ、ヘッダー名が重複しているものがあるためAdd headerをONにすることができません。
OFFの状態でColumnName等を使用するにはどうしたら良いでしょうか?

こんにちは

上記ですとDictionaryのキーも重複することになりますので、そもそも両方を設定するこができないと思います。(値も同一なら、問題ないかもですが)
事前にこのあたりの仕様を整理する必要があるかと思います。

ディクショナリーには追加しなくても良い項目の為、設定できないのは問題ないです。
AddheaderをOFFにした状態で範囲を読み込み、その後0行目を削除等ができれば良いかと思っております

※追記
上記をやってみましたがColumnNameに変化はありませんでした。。

item.ColumnNameではなく、データテーブルの(1)行目をディクショナリ―のキーに設定する方法はありますでしょうか。

度々申し訳ございません。

@HANACCHI
@Yoichi

今まで知らなかったのですが、ReadRangeで別々の範囲を2つ並べて同じデータテーブル変数に出力してみたら、AddHeaderがONでも最終的にすべてのデータが一つのデータテーブルに出力され、今回はこれで大丈夫でした。

大丈夫な理由は、
2つ目の範囲と1つ目の範囲で重複したヘッダーがある場合は2つ目に登場するヘッダー名が「Column()」になってしまいますが今回は必要のない項目だったためです。

データテーブルを初期化しずに連続で並べれば、上書きではなく追記されるのですね。

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