UIPATHで複数シートexcelの串刺し集計処理を考えています。
書式は同一ですが、シートの数が可変的です。
処理として
1ファイルにシートが複数あるので
Excel application scope で対象となるexcelを読む
assign
allSheets = myWB.GetSheets.ToArray
にしてシート名を配列にする。
for each でシートに名前を付与する(シート名.xlsx)
Write range
sheet.ToString + ".xlsx"で書き込む
つまりファイルから対象となるシートをexcelファイルとして複数はきだしています。
次に格納先のフォルダに対して
assgin
list = Directory.Getfiles(格納先のフォルダ)
でファイル名を配列で取得し
for each で配列にした、ファイル名をExcel application scopeで呼び出し
同一書式のcellの値をサマリーしようとしたところで頓挫してしまいました。
同一書式で複数ファイルの行列が同一のcell値を集計するにはどうすればよいでしょうか。
Honoka
(Honoka Hayasaka)
October 22, 2018, 1:44pm
2
集計したいのはExcelシート内の特定の値でしょうか?
ループするだけなら、単純にFor Eachを入れ子にすればできると思います。
「集計する」が変数に格納したいのであれば、多次元配列を作る、Dictionaryを作る、DataTableを作成して書き出す、等が必要になりそうですが……。
ありがとうございます。
変数にcell値を集計して最後のファイルが読み終わった後、変数から合計値を
トータル集計用のexcelシートに書き込みたいと考えていました。
よろしければ教えて頂きたく思います。
Honoka
(Honoka Hayasaka)
October 23, 2018, 12:13pm
4
String型→Int32型の変換は、
Int32.Parse(String型変数)
でできます(但し数字以外の値をいれるとFormatException等が発生するので、適宜Try Catchを使用してください)
なので、単純に合計値をとるなら、Int32型の変数を用意しておき、Read Cellした値を使って
Int32型変数 + Int32.TryParse(ReadCellで取得したString型の値)
を、Assignの右辺にすれば良いです。(左辺はInt32型変数になります)
合計値を書き出すときは
Int32型変数.ToString()
とすれば、String型として書き出すことも可能です。
1 Like
ありがとうございます。
基本形ができました。
excel串刺集計処理.xaml (26.9 KB)
total.xlsx (8.3 KB)
excelに合計を転記するときstring型になってしまいます。
excelへ合計を転記したあとは、excelで型変換(文字列から数値型へ)必要でしょうか。
またもし可能であれば多次元配列とDictionaryからもできればと思います。
VBAでなくUIPATHでの実現性も考えたいと思います。
よろしければヒントめいたこと教えていただければと思います。
Honoka
(Honoka Hayasaka)
October 29, 2018, 2:11pm
6
少し遅ればせながら、Dictionaryを使うサンプルです。
MultipleExcelFiles.zip (26.1 KB)
……Workflow自体はある意味シンプルなのですが、どうしても内容的には少し複雑になってしまいます。
基本的には、次の2点を押さえておくと理解しやすい、かもしれません。
Dictionaryは「キー値と、それに紐付く任意の値のペアを格納できる変数型」と思ってください。Dictionary型変数(キー値) で、値が取得できます。
キー値に紐付く値を設定するときは、Assignアクティビティで、左辺に「Dictionary型変数(キー値)」、右辺に紐付く値、という形で代入できます。
Dictionaryを型設定するときは、
Browse for Typesを開き、
Type Name: に
Dictionary<
まで入力すると、上記のように選択画面が出ます。
あとは、キー値の変数型(赤枠)と、それに紐付いて格納する値(青枠)を設定することで、変数型として設定できます。
(今回の場合、格納する値にDictionary型変数を更にいれている入れ子構造になっていますが、設定方法は同じです。上の青枠から「Browse of Types…」を選択すると2階層目の型選択画面が出るので、そこに Dictionary< を入力するだけです。
少し駆け足、というか概要だけの説明になってしまいましたが、MSDNのDictionary型の解説 なども参考にしてみてください。
1 Like
本当にありがとうございます。
改めて.netをより理解することでUIPATHでの作成の効率化また拡張性を感じました。
Dictionaryは、連想配列ということでキーと値がペアで管理されることがわかりました。
ありがとうごいざます。
頂いた、xamlファイルですがファイル名・シート名と値をDictionaryで管理して集計しているものと自分では理解したつもりです。
excelシートのB2に値が入力され集計されていますが、B2,B3と値が入力され集計したい場合、B3用のDictionaryを別途作成して集計することになるのでしょうか。
ピント外れているかもしてませんがご教示いただければと思います。