今回は
初心者が話すUiPath ~Excel処理問題【懇親会編】 [1]~
にて書いた、シチュエーションの自動化について書いていこうと思います。
作成予定の機能
前回も書きましたが、以下の内容を自動化していきたいと思います。
・一次会、二次会の参加予定人数の把握
・アンケート未回答者の把握
・excelのソート(参加、不参加、アンケート未回答)
・それぞれがいくら払うかの計算(役職に依存)
・部署ごとにexcelを分ける
・部署代表にexcelを添付し、メールで送る
課題資料(Googleドライブに飛びます)
※ダウンロードすると、同じ行全ての文字が合わさったものになってしまうので、
Webで表示し、コピーペーストをして作成、使用してください。
※作業途中で上記の内容はよく発生するので、別のフォルダで予備を保存しておくことをお勧めします。
こんなかんじで↓
予備用
xlamと同じファイル配下(実際に使用)
所持しているアンケート結果、各部署の名簿一覧.csvは
以下のようになっています。
準備出来ましたか?
UiPathの新規作成
UiPathを開きます。
いつも通り「Continue Free」をクリック。
適当な場所に適当なファイル名で、フローチャートを新規作成しましょう。
因みにこのTOP画面からの新規作成は、
Start > Simple Process をクリックすることで可能です。
流れの作成
どういった構成にするかを考えていきます。
本当は紙に書いていった方が良いのですが、
私は直接シーケンスを組みながら書いていく事多いです。
左のActivityからSequenceを引っ張り出してきます。
因みに、Sequenceを選択(黄色の状態)、
右クリック、Annotations>Add Annotationをクリックすると、
メモのようなものを記入、設置することが出来ます。
部署の特定
部署の特定を行いましょう。
その為にはまずアンケート結果のエクセル情報を取り出します。
ActivityからReadCSVを持ってきます。
「...」をクリックすると、直接使用したいCSVファイルを選択することが出来ます。
もしくは右側のPropertiesからFilePathを直接記入で、ファイルの指定が出来ます。
今回は「アンケート結果」のCSVファイルを選択します。
そしてPropertiesのOutput>DataTableにて、
このエクセルの情報を格納するDataTable型の変数を設定します。
(Ctrl+K を使用することで、Variablesにて変数を作成せずとも、
その場で変数を適切な型で生成することが出来ます。)
今回はresultDTという変数にしました。
(変数名つけるのまだまだ下手くそなんです。
お許しください)
次にこのDataTableを回す機能を付けます。
回すってなんだ!?となると思うので、
ちょっと試してみましょう。
For Each Row
を使用します。
使用するDataTableをセットします。
(今回はresultDT)
その中にWrite Lineを設置し、
row(0).ToString
と入力してみてください。
Write Lineはログ出力が出来ます。
Outputエリアに文字列等を出力できます。
row(0)は
エクセルデータの一列目のデータを指します。
試しにRunしてみましょう。
左下のOutputエリアに
ログが出力されています。
酷い文字化けですね!
本来ならば、「アンケート結果」のエクセルの
一列目に書かれている社員の名前が羅列されるはずが、
文字化けを起こしてしまっています。
こんな時の対処方は
Read CSV にてEncodingを指定します。
「"Shift-JIS"」と、入力し
再度Runしてみましょう。
左下のOutputをご覧ください。
正常に名前が出力できています。
このようにFor Each Row
はDataTableを一行ずつ巡っていきます。
一行見たら二行目、その次は三行目と、
存在するデータがなくなるまでぐるぐるFor Each Row
の中を何度も繰り返します。
では営業部の方だけ、ログ出力されるようにしてみましょう。
Read CSVをFor Each Row
の中に設置し、
営業のエクセルデータを格納する変数を作成しましょう。
(私は変数をsalesMemberDTにしました)
For Each Row
の中に、もう一つFor Each Row
を設置します。
今度はsalesMemberDTを回し、resultDTと比較していきます。
salesMemberDTのFor Each Row
のrowを違うものにしておきましょう。
混ざってしまうので。
ifを設置し、比較をしていきます。
これで、アンケート結果のデータを一行ずつ回し、
1人ずつ営業名簿に名前がないかチェックしていきます。
そして営業部の方だった場合、ログに名前が出力されるようになりました。
Runしていきましょう。
Outputに営業の方のみ、名前が出力されています。
成功です♪
今回はここで終わりにします!
エクセルの比較が出来るようになりました。
しかし営業部のみです。
このFor Each Row
を使用した比較をあと二つも設置すると、
ごちゃごちゃしてしまいますよね?
な の で
次はとある機能を使って、コンパクトにしていきたいと思います!
皆さんも考えてみてください!