LoginSignup
4
0

More than 1 year has passed since last update.

DataTableの列の並びの変更方法について(その2)

Last updated at Posted at 2022-08-29

皆もすなるQiitaといふものを、儂もしてみむとてするなり。

と言う訳で、こん**は!はなっち!です。

【初めに】
前回、DataTableの列の並びの変更方法についてを投稿したのですが、色々と調べていて、もっと楽ちんな方法があったので、これをまとめてみようと思います。


[DataColumn]の[SetOrdinal]メソッドを使用する。

[DataColumn]の[SetOrdinal]メソッドは、DataColumn の序数または位置を、指定された序数または位置に変更するものです(※表現を変えました)。

例えば、
DataTable.Columns(0).SetOrdinal(3)
とすると、最左端の列(0番目)を、変更した結果、最左端の列を0番目として数えた3番目の列に据えることを指します(構文はイメージ)。

【例】
image.png

image.png

この起点となる列番号と、行先の列番号をしっかりコントロールすれば、列の並びをうまく変更できることになります。


  • では、UiPathで仕上げていきましょう!

前提として、列レイアウトの情報は、変数としてString型配列で定義しています。
image.png
入力のDataTableは、EXCELから読み込んだものとします。レイアウトは、以下の図とします。
image.png

その1)入力DataTableから、不要な列を削除する。

入力のDataTableから、列レイアウトの情報に無い列は、「データ列の削除」アクティビティを使用して、削除します。
image.png

ここでのポイントは、「繰り返し(コレクションの各要素)」アクティビティの「次のコレクション内の各要素」の指定です。

本来なら、対象とするテーブルに属する列のコレクションを指定するのですが、「データ列の削除」が実行されると対象とするテーブルの列のコレクションが変化し、「繰り返し(コレクションの各要素)」アクティビティに悪影響を与えます。ですので、〔対象とするテーブル〕ではなく、DataTable.Clone メソッドを使って、〔対象とするテーブルの.Cloneされたテーブル〕を指定しています。

その2)入力DataTableへ、必要な列を追加する。

列レイアウトの情報が、入力のDataTableに無い列は、「データ列の追加」アクティビティを使用して、列を追加します。列の型はObjectでいいですね。
image.png

その3)入力DataTableの列を、列の情報に合わせて列の並びを変更する。

「メソッドを呼び出し」アクティビティを使用して、DataColumn.SetOrdinal(Int32) メソッドを呼び出します。
image.png

「メソッドを呼び出し」アクティビティでは、ターゲットオブジェクトは、移動する前の列情報(序数)、コレクションとして、移動先の序数を指定します。

ターゲットオブジェクト:
DT.Columns(DT.Columns(C).Ordinal)
⇒DT.Columns(DT.Columns(列レイアウトの1つ).序数)
コレクション:
DT.Columns.Count - 1
⇒DTの列数 - 1 ... これで最終列の後ろに移動できる。

処理結果

入力DataTable
image.png
列レイアウトの情報
image.png

処理結果
image.png
はい!完璧ですね!

【まとめ】

・不要な列は早めに削除してしまいましょう!
・後の処理で手間が掛からないよう、足りない列は事前に用意しておきましょう!
・SetOrdinalで、サクッと列位置を変更してしまいましょう!


おわりに

いかがでした?

この方法を使うと、変更後の列レイアウトを持った受け側のDataTableの領域を保有する事がなく、メモリの節約になるのではないか?と思うのです。しかも、実際に高速で処理できているのではないか?とも思うわけです。
とはいえ、開発者の好き好き、維持メンテする人の技量に合わせて、その方法は選択してくださいね。

今回も読んでいただきありがとうございました!
是非UiPathでのロボ開発の一助になればと思っています。

ありがとうございました!

【参考】

image.png
image.png

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0