それではお題です。ビジネスシーンでは使う機会が多いと思います。
練習のためにリストを作るのも面倒かと思いますので、データをダウンロードできるようにしておきます。
※白抜き丸数字が20までしかないため
任意のフォルダに対象となるファイルを置きます。
では、ワークフローを組んでいきます。
ここでは、まずDataTable型という変数にエクセルのデータを読み取るところから始めます。DataTable型というのは、ここで初めて出てきますが、String型やInteger型が単一データの変数であるのに対して、エクセルシートの様に行と列でマトリックス状になっているイメージでしょうか。
「範囲を読み込む」というアクティビティを使うのですが、下の様に同じ名前のアクティビティが2つあります。
実はこの2つ、日本語は同じですが英語だと少しだけ異なっています。
❶[アプリ統合]→[Excel]内にある
・・・英語版の表記はUiPath.Excel.Activities.ExcelReadRange
❷[システム]→[ワークブック]内にある
・・・英語版の表記はUiPath.Excel.Activities.ReadRange
英語版の表記は配置したアクティビティをクリックすると、プロパティパネルの上段に表示されます。
なお、❷は単独で使用できますが、❶は「Excelアプリケーションスコープ」の中でないと使えません。「Excelアプリケーションスコープ」を使うか否かの判断説明はUiPathの中でも難しい事項になるので、別の機会に譲ります。
ここでは❷を使います。
「範囲を読み込む」(UiPath.Excel.Activities.ReadRange)を接続、ダブルクリックしてプロパティを入力していきます。
❸のチェックボックスに✔を入れ、書式の設定を継続します。
❹にシートの名前を入れます。デフォルトでは1シート目がSheet1になります。
❺にファイルのフルパスを入れます。
❻に範囲を入れます。エクセルシートの範囲書式になります。任意にデータ行を読みたい時は""とします。
❼にはDataTable型変数の名前を入力します。この欄の中でCtrlキー+Kキーで「変数を設定:」となりますので、続けて設定したい名前を入力します。
ここで設定したDataTable_1に対してフィルタをかけることになりますが、フィルタする項目を設定しないといけません。この例の場合だとB列が該当します。
一番上の行から順にフィルターする文字列を抽出するために、元のファイル「買い物リスト.xlsx」のB列から抽出していきます。
B列を順に読み込んで行くことになるので、行数を変数にする必要があります。
変数パネルにある「変数の作成」をクリックします。
❽には変数の名称(任意)をいれます。
❾はInt32を選択します。これは整数である変数です。
❿には初期値、今回は1行目が項目行なので 2 としました。
続いて「セルを読み込み」のアクティビティを配置します。こちらも、「範囲を読み込み」と同様2種類あります。英語表記がUiPath.Excell.Activities.ReadCellのほうです。
⓫のチェックボックスに✔を入れ、書式の設定を継続します。
⓬にシートの名前を入れます。❹と同じです。
⓭に読み込むセル番地を入力します。先に設定した変数rowを使用し、B列を読み込むので
"B"&rowと記入します。
⓮にファイルのフルパスを入れます。❺と同じです。
⓯ここでの入力結果を出力する変数を定義します。
B列の値を順に上からとっていきますが、最終行を過ぎて空欄になったら終わりです。フロー条件分岐のアクティビティを配置し、プロパティの⓰にResult_B=""(B列が空欄)という条件を記入します。
True側に完了を通知するメッセージボックスを配置すると良いでしょう。
続いて、False側のを構築していきます。
「データテーブルをフィルタリング」アクティビティを接続し、「範囲を読み込み」で取得したデータテーブルであるDataTable_1をフィルタしていきます。
このアクティビティをダブルクリックします。
さらにアクティビティ内に表示される⓱「フィルタウィザード」をクリックします。
下のダイアログが表示されるので、入力していきます。
⓲には最初に読み込みしたデータテーブルの変数を入力します。
⓳は、このフィルタで抽出された分のデータで、Ctrlキー+Kキーを押して新たに定義します。この変数もDataTable型になります。
タグの「フィルター行」⓴を選択します。
列❶には今回フィルタする項目名称を入力します。今回は購入者名、データ上は「名前」なので"名前"と入力します。
操作❷には、抽出する際の条件を入力します。❸で設定する文字列に対して、「当該文字列で始まる」や「当該文字列で終わる」、「当該文字列を含む」など種々の条件を設定できます。今回は含む(Contains)をえらびます。
操作❸にはフィルタする文字列を入力します。これは固定ではなく、先のB列セルの読み取りでの出力結果になりますので、既に設定した変数をいれます。
入力が完了したら[OK]をクリックします。
1段上の階層(ここではフローチャート)をクリックし、全体を表示します。
フィルタしたデータテーブルを購入者ごとのエクセルファイルに落とし込む処理をしていきます。落とし込むファイル名は(購入者名).xlsxとします。
つまり、鈴木一郎さんの個別購入品一覧は鈴木一郎.xlsxで、これを次のフォルダの下に”購入者別”というフォルダ、C:\Users\osana\OneDrive\ドキュメント\UiPath\Lesson6\購入者別(皆さんは任意のフォルダ) を作って格納します。
「範囲に書き込み」のアクティビティ(こちらも2種あります。英語表記UiPath.Excell.Activities.WriteRangeの方)を接続し、ダブルクリックします。
❹のヘッダー追加は元のデータで1行目である項目行を入れるかを設定します。ここは1行目を項目行にするのは一般的なので、ほとんどの場合✔を入れて構わないと思います。
次に、❺❻に入力します。❺はシート名、❻はデータの開始セル(データテーブルの一番左上が来る位置です。ここでは❺をExcelシートのデフォルトである"Sheet1"、❻をシートの一番左上である”A1”にします。
さいごに、❼❽を入力します。❼にはフィルタリングされた出力データである⓳の変数を入力します。❽には保存ファイルのフルパスを入れます。ファイル名は(購入者名).xlsxとするので、購入者名の変数であるResult_B(⓯で定義)を用いて
"C:\Users\osana\OneDrive\ドキュメント\UiPath\Lesson6\購入者別\"+Result_B+".xlsx"
とします。
次に「代入」アクティビティを接続します。
先に❽~❿で設定した変数rowに1を加えたものを新たにrowに設定❾して、「セルを読み込み」のアクティビティに接続❿します。
これで構築は終わりです。実行します。完了と同時に以下のメッセージが表示されます。
以下の4つのファイルが作成されています。続いて各ファイルの中身を見てみます。
佐藤信二さんの分
山本太郎さんの分
田中浩二さんの分
最後に、鈴木一郎さんの分です。うまく抽出できました。
コメント