データテーブルからの行の取り出し方について

こんにちは

標題の件、データテーブルから特定の行(indexのみ分かっている行)を取り出してエクセルに記載したいのですが、どのような方法があるでしょうか?

<試したこと>

上記質問を参考に以下二つ試しましたがうまくできませんでした。

1DataTable型変数NewDtを用意し、Assign(代入)アクティビティで
NewDt={Dt1.Rows(0)}.CopyToDatatable()

⇒CopyToDatatable()が出てこず、無理やり入力すると「CopyToDatatableはsystem.arrayのメンバーではありません。」と表示され、原因を調べたところ、CopytoDataTableが使えない の質問にたどり着き、バージョンは異なるのですが同じ事象ということでこの方法は断念しました。

1 「代入」を使用して、dtCopyData = Dt1.clone
2 「メソッドを呼び出し」、Targetobject = dtCopyData,MethodName =ImportRow,プロパティのパラメータを追加して、Dt1.Rows(0)を指定してください。

⇒「~’ImportRow’という名前のパブリックinstanceメソッドがあります。」というエラーが出てしまい、調べたところ、InvokeMethodアクティビティの使い方、設定について こちらの質問で同様の事象が起きていたのですが、大文字小文字の違いということで、一応一通り試したのですがエラーは変わらずでした。

何か実現させるための方法はあるでしょうか?

※質問にタグをつけたかったのですがフォーラムのバグ?か何かで、選択しても何も選ばれないためつけておりません。

1 Like

データテーブルのフィルターはダメですか?

コメントありがとうございます。
フィルタリングする際に行インデックスでフィルターする方法が分からず、教えて貰えないでしょうか?

あぁ、行インデックスって列は無かったですか。。。しまった。

やはりできないんですね…
最悪手間はかかりますがインデックス用の列を付与するのもありですね。

そうなんですけどね。それが嫌で行インデックスからダイレクトでDataTable型にして、範囲に書き込みたいんですよねぇ。

軽率な回答でした。。。

考えられるのは、
1)先DataTableへ、元DataTableの列情報をクローンしてやる
2)元DataTable.Rows(ix) (←これはDataRow型)を先DataTableのデータ行として追加
でも、たしか元DataTableに属しているって怒られるので、
元DataTable.Copy.Rows(ix)
で、いけるかなぁ。。。

1 Like

試してみたんですが、Copyでも同じく元DataTableに属していると怒られてしまいます…

それが嫌で行インデックスからダイレクトでDataTable型にして、範囲に書き込みたいんですよねぇ。

そうなんです。行数が多いと処理時間が掛かってしまうのでそれが嫌なのでシンプルに実装できないかと…

iportrowの案でいけるみたいです。

何が違うのかわかりませんが。。
Main.xaml (7.3 キロバイト)

ありがとうございます。頂いたものを使ったらうまくいきました。
ただ、元々のInvokeMethodと、ターゲットオブジェクト、パラメータ、メソッド名の設定方法はすべて同じで、なぜうまくいっていなかったかは分かりませんでした。

1 Like

こんにちは

このあたりの日本語訳が結構いい加減で、正確には「ありません」と訳すべき内容かと思います。
原因的にはパラメーターの指定が良くなかった可能性が高いと思います。今一度引数の型が一緒か(DataRow型ではなくDataRow配列になってしまっている等)、不要な引数を作成してしまっている等を確認されると良いように思えます。

2 Likes

コメントありがとうございます。

メソッドがありますというエラーの意味が分からず、既定のメソッドは使えないの?とか考えていましたが、誤訳だったんですね。
該当するメソッドがないということであれば確かにパラメータなどがなにか違っていたのかもしれないので、次回以降発生したときにはそのあたりを重点的に確認するようにします。

2 Likes

私も勉強させていただきますm(__)m

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