繰り返し(各行)でヘッダーが結合セルとなっている場合の対処法

お世話になっております。
結合セル繰り返し
上記のような形の表を範囲で読み込み、【メンバー】【午前】で行項目を取得したいと考えております。
しかし、ヘッダーの追加を使用し、行項目を取得しようとすると、【午前】を取得する際にエラーとなってしまいます。
こういったヘッダーが複数段に及ぶデータを行取得したい場合、対処法、代替案などがあればご教示頂ければと思います。

処理部分の流れは以下になります。

以上、よろしくお願いいたします。

「範囲を読み込み」アクテイビティで、セルの結合されているされていないは意識できず、セル結合を解いた状態での読み込みとなります。ですので、B3セルが空白の状態でDataTable型に展開されます。

ですので、代入アクティビティで、
左辺:DT.Columns(0).ColumnName
右辺:”メンバー"
とし、列名を変えてあげると、のちのちの処理で列指定が名前で出来るようになりますね。

1 Like

こんにちは!
範囲を読み込みは"B3:D9"
代入
newData = SheetData.DefaultView.ToTable(false,"Column1","午後")
代入
newData.Columns(0).ColumnName = "メンバー"
これはやってみてください

サンプル必要があればご覧下さい。
BlankProcess5.zip (32.2 KB)

2 Likes

やや雑談:

こんな感じにできないかなー、というのを最近夢想しています。
image

UiPathと相性のいいExcelの表組って絶対に存在して、
・見出しが1行(=そのままDataTableの件名に使える)
・A1セルから見出し、A2セルからデータが開始する(=ReadRange/WriteRangeに小細工不要)
だと思っているんです。

日本人はExcelで帳票を作りたがるので、どーしても二段見出しやセル結合や空白ありのExcelシートが出来上がるのですけど、表のレイアウトを自身で変更可能であれば、このような小細工をしてワークフロー側を簡単にできるようにしたいな、と。

で、外に出すときにマクロでお化粧してあげればいいじゃん、って思ってます。
なかなか実行はできていないのですけど。

1 Like

見出しが一行であっても、セル内改行があると、DataTableの列名には使えるけど、Itemの指定の時に大変!とか、「○○(ちょっとした説明)」とかがあって、列名が妙に長い!なんて場合もありますよね。

こんな時、ヘッダーを追加させずに、アクティビティ側で「Column0」~の列名にしてあげて、ロボット側で綺麗に列名クレンジングをしてあげたりしています。

まぁ範囲を読み込みアクティビティで、ヘッダーを追加の位置を1行目ではなく、2行目も勘案してくれるようにして、2行目が空白だったら1行目を列名にする仕掛けにしてくれりゃいいんですけどね>^_^<

HANACCHI様、nguyendinhduc269様
回答ありがとうございます。
返信が遅くなってしまい申し訳ありません。

お二人の方法を参考に試してみたところ、無事に希望通りの値を取得することができました。
ただ、nguyendinhduc269様の

"代入
newData = SheetData.DefaultView.ToTable(false,"Column1","午後")"

の部分は、今回の自分のワークフローでは無くても大丈夫だったみたいです。
ご教示頂き、ありがとうございました。

1 Like

上記の代入は繰り返し代わりに使いますので、もし繰り返し使えばこの代入は要らないですようね。もしデータが三千レコード以上があればこの代入使った方が実行スピードが速いと思います。参考して頂いたありがとうございます。

1 Like

利用者が見出しを変更してワークローが想定外動作するリスクを考えると、見出しをExcelに依存せずにワークフロー内固有の名前を持っていたほうが安全なのですよね。
あとはワークフロー維持管理とのトレードオフですね。手数が増えてもきっちり安定させるか、ワークフローの量を削ってエンドユーザ側への制約をかけるか。。。エンドユーザが自身でメンテナンスをされるのであれば後者でも良いかな・・・と思ったりします。

一度制約を掛けたはずのセル上の列名。

ところがExcelに長けた人が気を利かせてセル内改行して、ロボ側で列名無しで異常終了。。。なんて事もありましたね。

口を酸っぱくして言っていたのですが、その方からの引継ぎがされなかったようでした(>_<)

1 Like

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