【第7回】ロータス師匠のWinActorシナリオ道場~データ転記編 ExcelからWebシステムへ①~
2021.07.12
ロータス君、今から君はとある家電量販店「ロータス電機」の本社営業マンじゃ!
ええっ!このWinActor道場から異動ってことですか!?
おお、前提が抜けておったな。
今回は、実際の事例を元にしたシナリオを作ってみようと思う。なのでロータス君は、現場の社員さんになりきった気持ちで、シナリオを作ってみて欲しいのじゃ。
なるほど、本当の事例を元にしたシナリオですか。難しそうですね…
そんなことはない!
これを実際に動かしていた社員さんは、ITの経験が全く無いと仰っていたが、ひとつひとつ見ていくことでしっかり理解されていたぞ。
それなら僕にも出来るかな?頑張ります!
※会社名・業界は実際の情報とは異なります。
目次
1.シナリオ概要
「ロータス電機」は全国展開している家電量販店です。
本社勤務のロータス君の元には、毎日全国の店舗から、その日の取引内容を記録した『POS取引履歴』が送られます。
ロータス君は、日々『POS取引履歴』を社内システムに手動で入力していましたが、この度業務の自動化を図ることとなりました。
この業務の自動化にあたり、ロータス君は以下の作業の流れで実装することにしました。
①社内システムを起動
②『未処理フォルダ』内のエクセルファイル数を確認
ファイル数が1以上であれば、ファイルの数だけ後述(③~⑥)の処理を繰り返し実行
※『未処理フォルダ』には、各店舗から受け取ったエクセルファイル『POS取引履歴』が事前に格納されていることとします
③エクセルファイル名から、転記に必要な情報を抽出・転記
④エクセルファイルを開いて、転記に必要な情報を抽出・転記
⑤処理完了したエクセルファイルを『処理済みフォルダ』に移動
⑥処理失敗したエクセルファイルを『確認依頼フォルダ』に移動
⑦③~⑥の繰り返し処理が完了したら、社内システムを閉じてシナリオを停止
今回は①~③までの処理を作っていくぞ!
2.このシナリオを通して学べる操作
ブラウザ起動
文字列操作
XPath
画像マッチング
エミュレーション
ファイル移動
例外処理
・・・etc
3.シナリオ作成に使う資料
今回は、「第7回WinActor道場」というフォルダとその中身一式を使います。
以下からWinActorDojo7.zipをダウンロード・展開し、フォルダ「第7回WinActor道場」任意の場所に格納してください。
フォルダの中身は以下のようになっています。
また、社内システムへのデータ入力用に、仮のフォームを用意しております。 以下のURLをご利用ください。
4.シナリオ作成
① 社内システムを起動
まず、ブラウザで社内システムを起動します。
以下の3つのライブラリを使用します。
①【ライブラリ】>23_ブラウザ関連
・ブラウザ起動
②【ライブラリ】>23_ブラウザ関連
・ページ表示
③【ライブラリ】>11_ウィンドウ関連
・ウィンドウの表示変更
プロパティ画面で詳細を設定していきます。
①ブラウザ起動
ブラウザ名には変数『ブラウザ名』を設定します。
変数『ブラウザ名』の初期値は「社内システム」と設定しました
直接プロパティ画面に「社内システム」と設定しても良いが、
この後ブラウザ関連ライブラリを多用するので、変数にしておくと誤字防止や入力の手間を削減出来ておすすめじゃ!
ブラウザ種類は、ご自身の環境に合ったブラウザを選択してください。
ここでは「chrome」を選択しています。
②ページ表示
ブラウザ名は先ほど作成した変数『ブラウザ名』を選択します。
URLには変数『URL』を設定します。
変数『URL』の初期値は、3.シナリオ資料でご案内した入力フォームのURLを設定してください。
(https://kadonooji-kujo-271.questetra.net/System/Event/MessageStartForm/151/0/idUrnQzOlqRYf27gxuynMlf1tRV2UrVj/view)
③ウィンドウの表示変更
シナリオ実行時のウィンドウ画面サイズを一定にするため、表示状態を「最大化」にします。
ウィンドウ識別名は、3.シナリオ資料でご案内している入力フォームを開き、選択してください。
以上の設定で、社内システムの起動ができるようになります。
ここで一度、動作確認をして、きちんとシステムが起動するか確認してみましょう。
後からエラーを修正するのは大変です
シナリオを早く完成させる近道は、こまめな動作確認ですね!
② 『未処理フォルダ』内のエクセルファイル数を確認
『未処理フォルダ』に処理すべきエクセルファイルが存在するかどうか確認します。
以下の3つのライブラリを使用します。
①【ライブラリ】>13_ファイル関連>04_ファイル一覧
・ファイル一覧(ファイル数)取得
②【ノード】>フロー
・分岐
③【ライブラリ】>13_ファイル関連>04_ファイル一覧
・先頭ファイルの取得
プロパティ画面で詳細を設定していきます。
①ファイル一覧(ファイル数)取得
フォルダ名には変数『未処理フォルダパス』を設定します。
変数『未処理フォルダパス』の初期値は、未処理フォルダの絶対パスを設定してください。
ファイル数には変数『未処理ファイル数』を設定します。
②分岐
プロパティから条件式設定画面を表示し、上記のように条件を設定します。
これにより、変数『未処理ファイル数』が1以上の数値だったら=未処理フォルダに1つ以上ファイルが存在したら
分岐のTrueへ、そうでなければFalseへ遷移するという設定が出来ました。
③先頭ファイルの取得
未処理フォルダにファイルが存在した場合、ファイルを処理しなければいけません。
ファイルを処理するためには、ファイルの名前が分かっている必要があります。
そこで、「先頭ファイルの取得」を分岐のTrueの箱の中に配置します。
フォルダ名は変数『未処理フォルダパス』を選択します。
ファイル名には変数『処理対象ファイルパス』を設定します。
分岐のTrue、Falseのそれぞれに待機ボックスを置いて、動作確認をしてみましょう。
未処理フォルダにファイルがある場合、空にした場合で遷移先がどう変わるのか、注目してください。
※動作確認が完了したら待機ボックスは外して構いません
以下は、未処理フォルダにファイルが2つ存在した場合の例です。
Trueへ遷移し、未処理フォルダの先頭にあるファイル
「履歴_20210701_コーホクキタ店_吉川朋美.xlsx」が取得できているのが分かりますね。
シナリオが大きくなってくると、毎回最初から実行するのは大変じゃろう。
そのような時は、動かしたいノードだけ選択し、右クリックから「部分実行」をしてみよう!
シフトキーを押しながらクリック選択すると、複数のノードを選択状態にできるぞ。
ただし、動作確認する箇所より前の処理で得たデータが必要な場合は、
部分実行がうまくいかないこともあるので注意です!
③ エクセルファイル名から、転記に必要な情報を抽出・転記
続けて「未処理フォルダ」にエクセルファイルが存在した場合の処理を作成していきます。
エクセルファイルが存在した場合、社内システムに転記する流れでしたね。
では、どのような情報を転記するのでしょうか?
社内システムを確認すると、まずエクセルファイルのファイル名から3つの情報を抽出する必要があることが分かります。
それでは、エクセルファイル名から情報を抽出する処理から作っていきましょう。
以下の2つのライブラリを使用します。
①【ライブラリ】>13_ファイル関連>05_ファイル名
・ファイルパスからフォルダパスとファイル名を取得
②【ライブラリ】>07_文字列操作>02_切り出し・分割
・文字列分割
①ファイルパスからフォルダパスとファイル名を取得
"2.『未処理フォルダ』内のエクセルファイル数を確認"で未処理フォルダの先頭にあるファイルを、
変数『処理対象ファイルパス』の中に取得したのを覚えていますか?
この時取得した情報は、正確には「エクセルファイルの絶対パス」です。
情報を抽出する時に絶対パスのままでは扱いづらいので、絶対パスからエクセルファイル名を抜き出しましょう。
エクセルファイル名は、この絶対パスを\マークで区切った際の一番後ろの部分です。
プロパティ画面で詳細を設定していきます。
対象ファイルパスは変数『処理対象ファイルパス』を選択します。
フォルダパスには変数『フォルダパス』を設定します。
ファイル名には変数『ファイル名』を設定します。
②文字列分割
変数『ファイル名』にエクセルファイル名が取得できました。
この中から3つの情報を取得する訳ですが、どうしたらよいでしょうか?
取得したファイル名を確認すると、情報がアンダーバーで区切られているのが分かります。
ライブラリ『文字列分割』では、指定した区切文字列で、文字列を分割することができます。
分割した文字列は、先頭から数えて0,1,2,3…と番号が割り振られます。
社内システムに転記する情報は「入力データ日付」「店舗名」「担当者名」ですが、上の図で見ると
1,2,3番目の文字列が対応しているようですね。
それでは、「文字列分割」を3つ使って、情報をそれぞれ抜き出しましょう。
分割元文字列は、全てのノード共通で変数『ファイル名』を選択します。
区切文字列は、全てのノード共通で値「_」を設定します。
インデックスは値「1」「2」「3」をライブラリごとにそれぞれ設定します。
分割文字列は変数『入力データ日付』『店舗名』『担当者名』をライブラリごとにそれぞれ設定します。
分割サイズは、全てのノード共通で変数『分割サイズ』を設定します。
文字列分割はコピーして中身を書き換えれば簡単ですね!
後はこれを貼り付ければよいですか?
そうしたいところじゃが、もう一工夫必要じゃ。
文字列分割で取得したデータと、社内システムの画面をよく見比べてみよう
特に変な所なんて…むむっ、日付の形式が違いますね!?
文字列分割で取得した日付はYYYYMMDD形式ですが、社内システムはYYYY-MM-DD形式のようです!
よく気付いた!
それに、担当者名も、拡張子「.xlsx」が付いたままになっておるの。
転記する前に、データの加工が必要なんですね。
実践では、塾と違ってきれいなデータがそのまま取れるということはあまり無いのう。
こういう細かいところで工夫が必要になってくるぞ。
押忍!
社内システムの形式に合わせてデータを加工します。まずは日付の処理を行いましょう。
文字列分割の下に、以下4つのライブラリを追加します。
①【ライブラリ】>07_文字列操作>02_切り出し・分割
・文字列切り出し(先頭何文字分)
②【ライブラリ】>07_文字列操作>02_切り出し・分割
・文字列切り出し(途中文字)
③【ライブラリ】>07_文字列操作>02_切り出し・分割
・文字列切り出し(後方何文字分)
④【ライブラリ】>07_文字列操作>03_連結
・文字列の連結(5つ)
上記の4つのライブラリを使って、
YYYYMMDD形式➡YYYY-MM-DD形式に変換します。
変換は以下の流れで行います。
プロパティ画面で詳細を設定していきます。
①文字列切り出し(先頭何文字分)
切り出し元文字列は変数『入力データ日付』を選択します。
切り出し文字数は値「4」を設定します。
切り出し文字は変数『入力データ日付(年)』を設定します。
②文字列切り出し(途中文字)
切り出し元文字列は変数『入力データ日付』を選択します。
切り出し開始位置は値「5」を設定します。
切り出し文字数は値「2」を設定します。
切り出し文字は変数『入力データ日付(月)』を設定します。
③文字列切り出し(後方何文字分)
切り出し元文字列は変数『入力データ日付』を選択します。
切り出し文字数は値「2」を設定します。
切り出し文字は変数『入力データ日付(日)』を設定します。
④文字列の連結(5つ)
文字列1は変数『入力データ日付(年)』を選択します。
文字列2は値「-(ハイフン)」を設定します。
文字列3は変数『入力データ日付(月)』を選択します。
文字列4は値「-(ハイフン)」を設定します。
文字列5は変数『入力データ日付(日)』を選択します。
連結結果は変数『入力データ日付』を選択します。
これで社内システムの形式に合わせた日付書式に変換する処理ができました。
次は、担当者名に入っている余計な文字「.xlsx」を削除していきます。
文字列の連結の下に、以下のライブラリを追加します。
①【ライブラリ】>07_文字列操作>02_切り出し・分割
・文字列を前後に分割
プロパティ画面で詳細を設定していきます。
①文字列を前後に分割
分割元文字列は変数『担当者名』を選択します。
区切文字列は値「.」を設定します。
前は変数『担当者名』を選択します。
後は変数『未処理ファイル拡張子』を設定します。
ではもう一度動作確認をしてみます!
日付も担当者名も、ばっちりじゃな!
やったー!これで今日の仕事をやり切った気分です
ふむ、大分説明も長くなってしまったし、この辺りで締めたい所じゃが…
最後、「入力データ日付」「店舗名」「担当者名」を社内システムに転記してから、今回の道場を終わろう
いよいよ取得した情報を社内システムに転記していきます。
以下のライブラリを使用します。
①【ライブラリ】>23_ブラウザ関連
・値の設定
プロパティ画面で詳細を設定していきます。
①値の設定
ブラウザ名は、全てのノード共通で変数『ブラウザ名』を選択します。
XPathは取得したXpath値をライブラリごとにそれぞれ設定します。
設定する値は変数『入力データ日付』『店舗名』『担当者名』をライブラリごとにそれぞれ選択します。
XPathの取得方法は第36回WinActor塾を復習じゃ!
データ転記に必要なライブラリはこれだけでいいんですね。
ここまでが大変だっただけに拍子抜けです
そうじゃの。"この3つの情報"については、ライブラリ「値の設定」だけで対処できるから簡単じゃの
(おや、何やら不穏な空気が…?)
まあ先のことは置いておいて。とりあえず頭から実行してきちんと動作するかを確認しようではないか!
お、押忍!
5.本日のシナリオまとめ
博士、ロータス君、お疲れ様です。
シナリオを実行して、社内システムの基本情報に、正しい形式でデータ転記されていれば本日の道場は完璧です!
次回、シナリオの続きを作っていくのでしっかり保存しておくのじゃぞ!
あっ…!
関連記事こちらの記事も合わせてどうぞ。
2021.08.20
【第15回】ロータス師匠のWinActorシナリオ道場~夏合宿特別版 総合問題編~
2021.08.19
【第14回】ロータス師匠のWinActorシナリオ道場~夏合宿特別版 例外処理編~
2021.08.18