Dictionary変数と配列について

◆やりたい事
データテーブルの各行を配列取得して、Dictionary変数に格納したいです。

◆やりたい事(詳細)
①テーブルを取得します。test.xlsx(Sheet1)、変数名「Dt」

②データテーブルの各行(繰り返し)アクティビティーで各行ずつ配列に取得
変数名「Arr」

③取得した配列をDictionary変数に格納、変数名「Dic_項目」

(各変数の詳細)


Arr
image
Dic_項目
image

◆困っていること
画像でも示している通り、②で配列にテーブルを配列に入れようとするとエラーが出ます。(出力エラー:項目の配列取得: Unable to cast object of type ‘System.Double’ to type ‘System.String’.)
Doubleがおかしいとのことなのでテーブルを以下のように変更するとうまくいきました。(数字の列を削除しました。)

基本的な事がわかっておらず、情報が不足している点もあるかもしれませんが、原因や対応方法を教えて頂けると助かります。
最後にXamlファイルを添付しておきます。

Main.xaml (10.3 KB)

こんにちは

Castの代わりにSelectメソッドで明示的に文字列化するか、object配列で受けるかの何れかになると思います。

前者は

Select(Function(o) o.ToString()).ToArray()

のようになると思います。

1 Like

ありがとうございます。
Arr = CurrentRow.ItemArray().Cast(of String).ToArray()
ではなく
Arr = CurrentRow.ItemArray().Select(Function(o) o.ToString()).ToArray()
にしたところ問題なくテーブルの各行を配列取得でき、Arrに代入できました。

Cast(of String) は、各項目が文字列型であることを前提
それに対して、
=CurrentRow.ItemArray().Select(Function(o) o.ToString()).ToArray() は、
ToString() メソッドがすべてのオブジェクトに対して効いて、各項目を文字列に変換するため成功したと理解しました。データ型に関係なくすべての項目が文字列として扱われる上記の書き方を今後は使用しようと思います。大変助かりました。ありがとうございました。

すみませんが、Dictionary変数に格納された後はどのような処理をされるのでしょうか。ご参考までに教えてください。

この課題の最終は単純にメッセージボックスに「Dic_項目(“ID0005”)(2)」などとして完了します。

ただもっと背景(本来の課題)を言えば下記の画像のようなことをしたかったんです。
(商品名1,2があるが、隣のNoが最大のものをテーブルに残し重複行を削除)

そこでは組み合わせで考えるべきだからDictionary変数の知識が必要かと思い勉強している途中で躓きました。

但しこの課題は、下図のように重複なしのテーブルを作ってフィルタリングと並べ替え、2行目以降は削除の方法で解決できるかもしれず、そちらはそちらで模索中です。(まだ纏まっていませんが、、、)

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