複数シート存在するExcelの読み込みについて

Excelに複数シート存在する中で、あるキーワードのシートのセルの値を読み込みたいのですが、セルの読み込みと1行を書き込みを利用し、どのように実装すれば宜しいでしょうか?

こんにちは。

「あるキーワードのシート」というのは
「参照したいシート名は一定で決まっている」か、
「キーワードを含むシートを参照したい」のどちらかと思いますが
比較的難しい後者について解説します。

順序としてはこんな感じでしょうか。
1.「ワークブックの全シートを取得」でExcelファイルの全てのシート名を取得する
2.「繰り返し (コレクションの各要素)」で1で取得したシート名分繰り返す仕組みを作成
3.繰り返し内でコレクションの要素item(シート名)が特定の文字を含むかどうかで分岐を作成
4.含んでいたら特定のセルの値を読み込み。含んでいなかったら次のシート名を読み取り

細かい設定は割愛しますが、こんな感じの順序でできるかなーと思います。
意図のはき違えはご容赦を。

1 Like

コメントありがとうございます
トライしてみたのですが、そもそもシート名の変数はどこに入り、分岐はどうするのか、わかっておりません。参考まで、作成途中のイメージをはります。

こんばんは。
@Mino04 さんの提案されているフローを作ってみました。
シート名にキーワード「2」が含まれているかを判定して、含まれていたらシート名を出力しています。
sample.zip (20.6 KB)

実装したいワークフローと合っていますでしょうか?
参考になれば幸いです。

Mino04さん、nanohanaさん
ご丁寧にありがとうございました
頂いたご助言で先に進むことができました

また自分でも調べまして、Uipathガイドの以下サイトよりサンプルダウンロードし、こちらでも実施できました。いくつかやり方があるかと思いますが、試して習熟していこうと思います。

先へ進みましたが、ある特定の文字を含むシートを取得し、その後、そのシートの特定セルの値を取得するにはどうすればよろしいのでしょうか?
セルの値を読み込むですと、”Sheet1”などのようにセルを指定することになり、どういったやり方がありますでしょうか?

こんにちは。
アクティビティガイドにもサンプルがあるんですね :slightly_smiling_face:

今回のやり方ですと、「ワークブックの全シートを取得」の出力に指定したList型の変数にシートの一覧が入ります。
「繰り返し (コレクションの各要素)」でList型の変数の"要素"を一つずつ取り出して、処理をします。
この"要素"にシート名が入っているので、「セルを読み込む」のシート名に"要素"で指定した変数を入れてあげれば良いと思います。

またワークフローを作ってみました。
シート名にキーワード「2」を含むシートの特定のセル「A1」を取得して、データテーブルに書き込むようにしました。
sample.zip (20.8 KB)

他にもやり方はいろいろあると思いますが、参考になれば幸いです。

nanohanaさん
ありがとうございます
sheetlistの要素のsheetでセルの値を読み込み、その後1行を書き込みで値を取得することができました!

ちなみにnanohanaさんがされていた、配列への代入がなぜ必要なのでしょうか?データの構築といった処理も前後でされていますが、これはどういった処理なのでしょうか?ざっくりとした質問となりすみません。

2 Likes

@111161 さん
解決されたようで良かったです!

読み込んだセルをそのあとどう使われるかわからなかったため、DataTable型の変数にシート名とセルの内容を書き込んでみたのですが、、反って分かりにくかったですね :dizzy_face:

一応解説させて頂きます。
(1)「データテーブルを構築」で結果を書き込むDataTableを作ります
(2)「代入」で配列の0番目にシート名、「セルを読み込み」で配列の1番目にセルの内容を入れます
(3)「データ行を追加」で(1)のDataTableに(2)の配列を追加します
(4)「データテーブルを出力」でDataTableをString型に変換します
(5) (4)のString型に変換したDataTableを「一行を書き込み」で出力パネルに出力します
image

後から気づきましたが、配列は使わずに「データ行を追加」の"列配列"に直接記載した方がスッキリするかもしれません。
(4)(5)はデバッグのために出力パネルに出したかっただけなので、無くて大丈夫です。

1 Like

@111161さん
以下サイトは似てるサンブルがあるので、ご参考になれば 嬉しいです。
https://uipath-example.com/read-excel-with-multiple-sheets/

nanohanaさん
ご返信遅れ大変申し訳ございません
少し立て込んでおりました

データテーブル構築が簡単にできてしまうのですね!

2点ほど確認させて頂けますと助かります。
1.nanohanaさん記載の、”後から気づきましたが、配列は使わずに「データ行を追加」の"列配列"に直接記載した方がスッキリするかもしれません。”はどういった意味となりますでしょうか?

2.代入の後、複数セルを読み込むために、セルを読み込みを複数直列に並べた場合、データ行を追加にてDBには、シート名,XX,YY,ZZ,AA,BB・・・NNといったようにカンマ区切りで1行出力されるのでしょうか?

UEさん
情報ありがとうございます!
本HP、いろいろ問題やサンプルなど記載されていますね。
今後に役立ててみようと思います。

サイト拝見いたしました
⑤の箇所で(0)、(1)といった形式で、シート名や値が出力されるのですね。簡易的な記載で実装できるなあと思いました。

@111161 さん
質問に回答させて頂きます。

1.nanohanaさん記載の、”後から気づきましたが、配列は使わずに「データ行を追加」の"列配列"に直接記載した方がスッキリするかもしれません。”はどういった意味となりますでしょうか?

お渡ししたサンプルは、追加したい行の配列を作ってデータテーブルに追加していますが、
下記のように「データ行を追加」のプロパティ「列配列」に直接配列を記載することもできるようです。

VB.NETで配列は {“いち”,“に”,“さん”} と表します。
このように記載してもお渡ししたサンプルと同じように動きます。
.

2.代入の後、複数セルを読み込むために、セルを読み込みを複数直列に並べた場合、データ行を追加にてDBには、シート名,XX,YY,ZZ,AA,BB・・・NNといったようにカンマ区切りで1行出力されるのでしょうか?

追加する一行の列を増やしたい場合は、まず「データテーブルを構築」で列を増やしてください。
その後の処理は下記どちらかを行ってください。

方法1:追加したい行の配列を作ってデータテーブルに追加する
(0)「代入」で配列の0番目にシート名(item)を入れる
(1)「セルを読み込み」で配列の1番目にセルの内容を入れる(結果欄:配列(1))
(2)「セルを読み込み」で配列の2番目にセルの内容を入れる(結果欄:配列(2))
(3)「セルを読み込み」で配列の3番目にセルの内容を入れる(結果欄:配列(3))
(4)「データ行を追加」でDataTableに配列を追加します(列配列欄:配列)
※ここで"配列"はString型の変数です

方法2:「データ行を追加」のプロパティ「列配列」に直接配列を記載する
(1)「セルを読み込み」でString型XXの変数にセルの内容を入れる(結果欄:XX)
(2)「セルを読み込み」でString型YYの変数にセルの内容を入れる(結果欄:YY)
(3)「セルを読み込み」でString型ZZの変数にセルの内容を入れる(結果欄:ZZ)
(4)「データ行を追加」でDataTableに配列を追加します(列配列欄:{item, XX, YY, ZZ})

すみません、長くなってしまいました。伝わりますでしょうか…? :sob:

nanohanaさん
いろいろありがとうございます

1.に関しましては、代入することなく直接書き込めるという理解をしました

2.についてですが、方法1は配列配列に直接記載、方法2はいったん変数に格納してその後配列にという理解です。
頂いた情報を元に、testエクセルファイルのB1セルに値を設定し、添付のように作成しましたが、エラーとなってしまいました。何が原因となりますでしょうか?

nanohanaさんがおっしゃっていた、”まず「データテーブルを構築」で列を増やしてください”も気になっております。

すみません、大事なことをお伝え忘れていました :fearful:

エラーの原因は、恐らく配列の宣言のせいです。
0~1番目しかない配列の2番目に値を入れようとしたためだと思います。

変数パネルの「配列」の既定値の欄に「new string(1){}」と書かれていると思います。
これは配列を使うために必要な宣言で、「new string(1){}」の 1 は、配列の長さを表します。
※注意※ 配列の番号は0から始まるので実質、配列の長さは 1 ではなく 2 です。


読み込みたいセルを増やしたい場合は、この数字を増やしてください。(←ここ忘れてました!)
例えば、{シート名, A1セル, B1セル} であれば長さが 3 の配列が必要なので「new string(2){}」です。

もう一つ、「データテーブルを構築」で列を増やす部分ですが、下図のように読み込みたいセルの数に合わせて列を追加してください。
左側にある「+」ボタンをクリックすると列を追加できます。

sample.zip (23.3 キロバイト)
説明があまり上手でないので、他にも不明点ありましたらお気軽に聞いてください!

nanohanaさん
いえいえ、大変わかりやすいです!!
頂いた情報で、無事3項目の出力までできました

これを画面上ではなく、データテーブルから一括してエクセルに書き込もうと考えていますが、添付のようなやり方ではうまくいきません。。。

こんばんは :slightly_smiling_face:
無事完成に向かっているようで良かったです!

エラーですが、「範囲に書き込み」の入力が「データテーブル確認用」ではなく「データテーブル」にすればうまくいくと思います。
「データテーブル確認用」は、出力パネルに出力するためデータテーブル型からString型に変換しています。(もし不要であれば「データテーブルを出力」ごと消しちゃっても大丈夫です)
「範囲に書き込み」の入力は、データテーブル型で指定する必要があります。

nanohanaさん!
いろいろありがとうございます
データテーブル型で指定し、エクセルに一括で出力することができました
これができますと、自分がやりたかったことが前進いたします
実装をさらに進めてみようと思います。

2 Likes

nanohanaさん
すいません、1点質問があります
Excelに複数行(固定ではなく、都度行数は変わる)を、1行づつ読み込み、その中の項目を使って処理をしたいと思っています。
その際、A1やB1といった固定の実装をすると、2行目以降処理できないため、汎用的にどうすればいいか、アドバイス頂けますと助かります。
ちなみに、
・ファイル名取得
・繰り返し(各行)
・範囲を読み込み
・代入
・セルを読み込み
あたりかと想定していますが、いまのところうまくいっていません。

こちらで投稿いただいている質問と同じですよね?同じでしたら、上記URLのトピックで継続していただき、こちらの質問については削除いただいたほうが良いかと思います。
※質問が複数になると、回答先も複数になり回答が集約されなくなります。そうすると、今後同じような困りごとがあって調べた方が、解決策を見つけにくくなってしまいます。