じっぱひとからげスマートフォン用の表示で見るじっぱひとからげ十把一絡げになんでもかんでもつづる。技術blog.jippahitokarage.comUiPath入門(2)では、zaimにログインするところまでをRecordingで取り込む作業を紹介した。今回はその続きを紹介する。この自動化の取り組みは、わが家のzaimの家計簿データを対象として、「未分類」に仕分けられたものの一覧をLINEのメッセージに通知するというものだ。<実装の内容>(1)zaimにログインする(前回はここまで)↓(2)家計簿データをダウンロードする↓(2)家計簿から「未分類」を抽出する↓(3)LINEに未分類の一覧を通知する全体のフローチャートCSVのダウンロードCSVを読み込むCSVをフィルタして出力するLINEにメッセージを送信UiPath入門シリーズはこちら全体のフローチャートフローは以下の通り。それぞれのSequenceについて内容を見ていくことにする。じっぱひとからげ)参照。CSVをダウンロードする際、そのままのファイル名で保存しても良いが、後続の読み込みを簡易化するため、名前をつけて保存することにする。ここではdatestrという名前のString型の変数を指定してファイル名としている。指定しているのは、datestrというString型の変数に格納された文字列をキーボードで入力したあとでENTERキーを押すことを指示している。いう文字列で初期化してある。nowは現在の日付・時刻を持つオブジェクトで2017年現在だとnow.Date.Year.ToStringは"2017"を返す。datestrには今日日付の場合"20170819"が格納されている。日付や時刻に関する操作は頻繁に登場するのでぜひ覚えておきたい。話はそれるが、もっとシンプルにnow.toString("yyyyMMdd")と出力するフォーマットで指定することもできる。Boxにこのように定義して出力すると、同じ結果が得られる。AddDaysを使うことで日付を前後させることもできる。引数に負の数を入れれば前日、前々日の日付も取得できる。これでyyyyMMdd.csvというファイルがダウンロードできた。CSV」Activityにファイルパス、文字コード、読み込む変数、デリミタを指定するだけで良い。CSVを読み込むためのDataTable型の変数を宣言しておく。ここではdtZaimDataという名前のDataTable型の変数を用意した。CSV」Activityを用意する。Pathと、読み込むときの文字コードEncordingと、どの変数に読み込むのかOutputを指定する。読み込む対象はCSVなのでデリミタDelimitatorはCommaのままで良い。CSVの先頭行が列名を示しているのであれば、IncludeColumnNamesにチェックを入れておく。指定するファイルはこれまでの工程でzaimからダウンロードしたCSVで、ファイル名はdatestr+".csv"だ。zaimではダウンロード時に文字コードを選択できるが、デフォルトではShift-JISになっているようなので、ここではShift-JISを指定している。CSVをフィルタして出力するzaimのCSVの列名は以下のようになっている。基本的にはこれまでの振り分けルールなどから食料品を買ったのか外食なのかなどを判定してくれるが、zaimが判定しきれなかったものは「未分類」とされる。そこで、わが家の家計簿の判定が「未分類」となったものだけ抽出したい。実際のCSVはこちら。家計が丸出しなので列名以外は伏せておく。やりたいことは、"ジャンル"列が"未分類"のデータだけを抽出するということ。こちらが実際のフローチャートだ。普段からプログラミングに慣れている人なら、見ただけで内容は把握できると思う。each」Activityを利用して、DataTable変数に可能されたデータを1行ずつ取り出し、「If」Activityで"ジャンル"列が"未分類"かどうかを判定し、Trueの場合はmessageというString型の変数に格納してiをインクリメントし、Falseの場合は何もしない。これを繰り返すことにより、messageには"ジャンル"列が"未分類"の行だけ取り出されることになる。すると、DataTableに対してSQLを投げるActivityがあるのかもしれない。現時点で私が調べきれていないだけなので、もっとスマートな方法がある可能性があることは承知いただきたい。代入は「Assing」Activityを利用する。左辺に右辺を代入する。messageについては、このような式を書いている。message+row("日付").ToString+",”+row("ジャンル").ToString+",収入"+row("収入").ToString+",支出"+row("支出").ToString+","+row("商品").ToString+","+row("メモ").ToString+Environment.newline列名の指定はInt型で列番号を指定することもできるし、CSVの読み込みのときに1行目が列名であるとしている場合は、列名を文字列で指定することもできる。ここは少しハマったところではあるが、改行コードはEnvironment.newlineで表現される。"\n"と入力してもただの文字列としか判断されないので注意。message」Activityは標準出力に任意の文字列を出力できるので、読み込んだCSVの内容を確認するのに利用している。LINEにメッセージを送信LINEはWindows用のデスクトップアプリケーションをインストールしておく。ログインについてはzaimのようなWebアプリケーション同様、ユーザIDとパスワードを入力することで自動化できる。ここで"未分類"を抽出したString型のmessageをメッセージ欄に入力して送信する。スマホの画面で見るとこんな感じ。messageの行末には改行コードが入っているので、LINE上は1つずつが別の発言として送信される。これで、わが家の家計簿の"未分類"一覧をLINEに通知する仕掛けができた。今回のケースのようにブラウザ上のWebアプリとWindowsアプリケーションであるLINEを横断するような自動化の仕掛けが簡単に実装できることこそRPAの真価が発揮される場面なのだと思う。はてなブログProSIerを5年ほど経験してから、ユーザ企業の情シスで社内SEをやっています。(1)スターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。