メニュー

logo

カチシステムはお客様に寄り添った
システム開発と支援サービスを提供し
「やさしい最先端」を創造します。

【第8回】ロータス師匠のWinActorシナリオ道場~データ転記編 ExcelからWebシステムへ②~

2021.07.19

さて今回は、データ転記編~ExcelからWebシステムへ②です。皆さん前回の内容は覚えていますか?

確か、ロータス電機に入った新人営業マンロータスが、

営業成績1位を目指して駆け上がるストーリーでしたよね

全然違うわ。①を読み直してくるのじゃ!

1.シナリオ概要

 

「ロータス電機」は全国展開している家電量販店です。

本社勤務のロータス君の元には、毎日全国の店舗から、その日の取引内容を記録した『POS取引履歴』が送られます。

ロータス君は、日々『POS取引履歴』を社内システムに手動で入力していましたが、この度業務の自動化を図ることとなりました。

 

 

 

この業務の自動化にあたり、ロータス君は以下の作業の流れで実装することにしました。

 

①社内システムを起動

 

②『未処理フォルダ』内のエクセルファイル数を確認

ファイル数が1以上であれば、ファイルの数だけ後述(③~⑥)の処理を繰り返し実行

※『未処理フォルダ』には、各店舗から受け取ったエクセルファイル『POS取引履歴』が事前に格納されていることとします

 

③エクセルファイル名から、転記に必要な情報を抽出・転記

 

④エクセルファイルを開いて、転記に必要な情報を抽出・転記

 

⑤処理完了したエクセルファイルを『処理済みフォルダ』に移動

 

⑥処理失敗したエクセルファイルを『確認依頼フォルダ』に移動

 

⑦③~⑥の繰り返し処理が完了したら、社内システムを閉じてシナリオを停止

今回は④の処理を作っていくぞ!

2.シナリオ作成

幕間 シナリオを見やすく整理しよう

前回のシナリオは保存してあるかな?

今日はその続きから作っていくぞ

はい!こうして見ると、既にボリュームのあるシナリオになってきてますね。

今日の内容を追加したら、画面に表示しきれないのでは?

確かに、ちと全体像が分かりづらくなってくるかもしれないのう。

よし、続きの処理を作る前に一旦シナリオを整理しよう

シナリオが大きくなると、一つの画面で確認するのが難しくなってきます。

全体像の把握や、エラー時の原因究明に手間取ってしまうことも。そんな時は、サブルーチンを使ってみましょう。

 

サブルーチンの詳細説明は第9回WinActor塾をご確認ください。

 

以下のライブラリを使用します。

 

①【ノード】>フロー

  ・サブルーチングループ

 

フローチャート表示エリアの空白部分に、サブルーチングループを配置してください。

 

シナリオの中にある、「基本情報抽出」グループと「基本情報入力」グループを、

サブルーチングループの開始と終了の間にドラッグアンドドロップで移動します。

 

プロパティ画面で詳細を設定していきます。

 

①サブルーチングループ

名前を、値「サブルーチングループ」から値「基本情報を転記」に書き換えます。

 

続けて、以下のライブラリを使用します。

 

①【ノード】>フロー

  ・サブルーチン呼び出し

 

プロパティ画面で詳細を設定していきます。

 

①サブルーチン呼び出し

名前を、値「サブルーチン呼び出し」から値「基本情報を転記」に書き換えます。

サブルーチン名は、先ほど作成したサブルーチングループ「基本情報を転記」を選択します。

 

シナリオの中にあった、基本情報を転記する処理を外側に出したぞ。

シナリオ上にはサブルーチン呼び出し「基本情報を転記」だけが表示され、見た目スッキリじゃ!

ははあ、サブルーチン呼び出し「基本情報を転記」に辿り着いたらサブルーチングループ「基本情報を転記」に飛んで(A)、

処理が終わったらまたサブルーチン呼び出し「基本情報を転記」に戻ってくる(B)、ということなんですね。

 

この後作成する「④エクセルファイルを開いて、転記に必要な情報を抽出・転記」

の処理もノードをたくさん使うので、予めサブルーチン化しておこう!

④エクセルファイルを開いて、転記に必要な情報を抽出・転記

前回は、エクセルファイルのファイル名から情報を抽出し、社内システムの基本情報に転記する所までを作成しました。

今度は、エクセルファイルの中から情報を抽出し、社内システムのPOS取引履歴に転記します。

 

それでは、エクセルファイルから情報を抽出する処理から作っていきましょう。

先ほど作成したサブルーチングループに、ライブラリを配置します。

 

以下の2つのライブラリを使用します。

 

②【ライブラリ】>18_Excel関連>01_ファイル操作

  ・Excel開く(前面化)

 

②【ライブラリ】>18_Excel関連>03_行列操作

  ・Excel操作(行の読み取り)

 

 

プロパティ画面で詳細を設定していきます。

 

①Excel開く(前面化)

ファイル名は変数『処理対象ファイルパス』を選択します。

シート名は、今回扱うエクセルファイルには1シートしか存在しないため空白のままで構いません。

※シートが複数あるファイルを扱う際は、シート名も設定することを推奨します

 

②Excel操作(行の読み取り)

 

今回は、B列・D列・E列・F列の4列からデータを取得します。

同じ行の複数列から値を取得する場合は、ライブラリ「Excel操作(行の読み取り)」が便利です。

 

 

 

でも博士、「Excel操作(行の読み取り)」にはA~E列までしか設定項目がありませんよ?

今回はF列のデータも取得したいから、このままでは使えないのう。

ではロータス君、プロパティ画面の「スクリプト」タブを選択してくれるかな?

 

わっ!何か出てきました!

これがライブラリの内部設定部分…ホームページで言うところのHTMLといった感じじゃな。

ここを書き換えることで、ライブラリに多様な修正ができるぞ。

い、いいんですか?書き換えてしまっても

たとえスクリプトを書き換えても、変更が反映されるのはあくまで今操作しているこのライラリだけじゃ。

大本のライブラリが変更されることはないから安心しなさい。

変更を加えたライブラリは、付箋やコメントなどで分かるようにしておくとよいぞ。

シナリオ作成者以外の人が修正をする時や、何か不具合が起きた時の確認時に目印になるからの!

スクリプトをスクロールすると、「指定されたセルを取得する」という欄が出てきます。

ここが、先ほどプロパティ画面に表示されていた入力欄を構成する箇所です。

このスクリプトのA~Eを指定している箇所を、以下の内容に書き換えてください。

 

"Set cell = worksheet.Range(""B"" & current_gyou)

SetUMSVariable $B列$, cell.value

Set cell = worksheet.Range(""D"" & current_gyou)

SetUMSVariable $D列$, cell.value

Set cell = worksheet.Range(""E"" & current_gyou)

SetUMSVariable $E列$, cell.value

Set cell = worksheet.Range(""F"" & current_gyou)

SetUMSVariable $F列$, cell.value"

 

書き換えたら、「更新」ボタンを押してプロパティ画面を閉じます。

その後、もう一度プロパティ画面を開いてみてください。

おおー!指定したい列に入力欄が変わりました!

後は中身を設定すればいいんですね

行(自動カウントアップ)には変数『データ取得行』を設定します。

変数『データ取得行』の初期値は「2」と設定しました。(エクセルファイルの2行目以降からデータが記載されているため)

ファイル名は、変数「処理対象ファイルパス」を選択します。

シート名は、エクセルファイルが1シートのみの構成のため省略します。

B列は変数『注文番号』を設定します。

D列は変数『商品名』を設定します。

E列は変数『販売数』を設定します。

F列は変数『販売金額』を設定します。

変数名は自由につけて構わないが、自分以外の人がシナリオを見た時に、それがどんな情報か分かるような名前であることを意識しよう!

それでは動作確認をします!

今回は変数をたくさん作ったので、見ごたえがありますね

変数と、取得したデータが正しいかよく注意しましょう。

「販売数」と「販売金額」のように似たデータは、設定ミスで入れ替わってしてしまっている、なんてこともよくあります。

 

 

 

それでは、取得した情報を社内システムに転記していきます。

以下のライブラリを使用します。

 

①【ノード】>アクション

  ・画像マッチング

 

②【ノード】>アクション

  ・クリップボード

 

③【ライブラリ】>04_自動記録アクション

  ・エミュレーション

 

「値の設定」は使わないんですか?

おお、ちゃんと前回の内容を覚えておったか。

そう、今回はエミュレーションを使ったデータ転記にする必要があるのじゃ

ここではライブラリ「値の設定」は使いません。第7回の道場で転記したデータとは少し形式が違うからです。

 

・第7回で転記したデータ(基本情報)

基本情報は、設定する項目が常に3つで固定でしたね。入力欄も、毎回同じ場所でした。

 

・第8回で転記するデータ(POS取引履歴)

一方、今回転記するPOS取引履歴はというと、エクセルファイルによってデータの数が異なります。

コーホクキタ店は4つ、ヤマオカ店は5つデータが存在します。

そのため、設定項目の数も、入力欄も毎回異なる可能性があります。

このような可変のデータを扱う場合、固定の場所を指定する「値の設定」ライブラリは都合が悪いのです。

※場合によっては、「値の設定」ライブラリを可変のXPathに対応させることも可能ですが、今回は省略いたします。

ううん、つまり…?

今はデータ数が少ないから何とかなりそうに思うかもじゃが、このデータが100件以上あったらどうする?

100件分、ライブラリ「値の設定」を置くかね?

それはちょっと現実的じゃありませんね。

そう。そこで画像マッチング+エミュレーションの組み合わせじゃ

まずは一つずつ動きを見ていこう。

 

 ①画像マッチング

イメージ画像は、社内システムの画面を選択します。

ウィンドウ識別名は、社内システムの画面を選択します。

「注文番号」の表記がある箇所を、マッチング画像の範囲として囲みます。(赤枠部分)

「注文番号」の下のテキストボックスに、マウス操作位置を設定します。(青十字キー部分)

アクションは「左ボタンクリック」を選択します。

 

画像マッチングにより、注文番号の下にあるテキストボックスにカーソルが設定されました。

この状態で、貼り付けのショートカットキー操作を行います。

 

 

②クリップボード

「クリップボードへ値を設定」を選択し、設定値から変数『注文番号』を選択します。

 

 

③エミュレーション(1)

名前を、値「エミュレーション」から値「Ctrl +V」に書き換えます。

ウィンドウ識別名は、社内システムの画面を選択します。

操作は、キーボード[Ctrl]及び[V]を選択します。

※Down・Up両方を設定すること、Down・Upの順番を間違えないようにすることをご注意ください。

 

 

注文番号が貼り付けられました。

では、次の設定項目を貼り付けるため、カーソルの位置を移動させます。

 

社内システムの画面を手動で操作してみてください。

今回使用する社内システム画面では、「Tab」キーを押すと一つ隣の入力欄へ移動しますね。

WinActorにTabキーを押下させれば、カーソル位置を移動できそうです。

 

 

PCで操作する画面には、何らかのキー操作が可能になっていることが多いです。

特に、入力欄をTabで移動する操作はよくあるものですので、一度試してみてください。

Tab以外には、Enterキーなどがトリガーになっていることもあります。

あれ、博士。注文番号の入力欄にカーソルを置くときは、画像マッチングを使いましたよね?

今日はやけに鋭いじゃないか、ロータス君。

そう、ここではTabキーで移動――エミュレーションで移動することがミソなのじゃ。

画像マッチングによりカーソル位置を設定する際は、「注文番号の下のテキストボックス」と固定の場所を指定しましたね。

一番最初に転記をスタートする箇所は、毎回必ず固定のため、画像マッチングで指定できるのです。

しかし、それ以降の移動箇所は、エクセルファイルのデータ数に応じて可変のため、予め設定しておくことができません。

そこでTabキーによる移動を行います。

Tabキーを押す操作は、社内システム上のどこか特定の場所を指定しているわけではないので、可変の値に対応できるのです。

 

③エミュレーション(2)

名前を、値「エミュレーション」から値「Tab」に書き換えます。

ウィンドウ識別名は、社内システムの画面を選択します。

操作は、キーボード[Tab]を選択します。

 

注文番号から商品名のテキストボックスへカーソルが移動しました。

もうお気付きの方がいるかもしれませんが、これ以降の流れは商品名と同様です。

 

「クリップボード」と「エミュレーション」を、注文番号と同じ構成で追加してください。

注文番号に使ったライブラリを丸ごとコピーしても構いません。

 

※クリップボードだけプロパティ画面の内容が異なります。

「クリップボードへ値を設定」を選択し、設定値から変数『商品名』を選択します。

販売数、販売金額についても同様の設定を行います。

 

 

 

4項目分の貼り付け処理のセットが出来たら、以下のような動作結果になるかご確認ください。

成功しましたね!いやはや、長い道のりでした。

成功は何よりじゃが、終わった気分になるのはまだ早いぞ。

エクセルファイルを見たまえ。

げっ、まだ3行分データが残っていた…。

ふふふ…さあどうするかな?

甘く見ないでください!こうして…こうですね!

ちょいちょいちょいちょい

多い、多いぞノード数が

一旦暴走する前の状態にシナリオを戻すのじゃ

そして代わりに、これを置いてくれい

 

以下のノードを使用します。

 

①【ノード】>アクション

  ・繰り返し

 

シナリオの中にある、「Excel操作(行の読み取り)」と、「注文番号入力」~「販売金額入力」のグループを

繰り返しグループにドラッグアンドドロップで移動します。

繰り返しグループを、画像マッチングの下に移動します。

あまりにも一気に改造したので何が何だか

安心せい。今から説明するぞ

シナリオの見た目が大きく変わりましたね。

繰り返しグループを入れることで、複数行のデータを持つエクセルファイルにも対応出来るようになりました。

以下の画像より、処理の流れを確認してください。

画像マッチングが繰り返しの外にあるのは、転記先のスタート位置を決める処理だからじゃ。

繰り返しの中に置くと、毎回同じ場所から転記を始めてしまい、

前に入力したデータが上書きされてしまうからな。

最初以外はTabキーでどんどん場所を移動してますもんね。

また、「Excel操作(行の読み取り)」は自動で読み取る行をカウントアップするぞ。

転記を繰り返すごとに、前回より1行下のデータを取得してくれるのじゃ。

なんて便利!

プロパティ画面で詳細を設定していきます。

 

①繰り返しグループ

回数を選択し、変数『繰り返し回数』を設定します。

繰り返し回数は何回がよいのでしょうか?

データ転記をする回数ということじゃから、エクセルファイルに存在するデータ数分が適当じゃろう。

エクセルファイル内のデータ数を取得します。

以下のライブラリを使用します。

 

②【ライブラリ】>18_Excel関連>03_行列操作

  ・Excel操作(最終行取得 その1)

 

①【ノード】>変数

  ・四則演算

 

 

 

①Excel操作(最終行取得 その1)

ファイル名は変数『処理対象ファイルパス』を選択します。

最終行には変数『最終行』を設定します。

 

このライブラリを使えば、エクセルファイルの何行目までデータが入っているか分かりますね。

この変数『最終行』に取得された行数が繰り返し回数ということでしょうか?

惜しい!エクセルファイルには1列目に見出しがあったな。

見出し行を転記する必要はないので、「最終行-1行」が繰り返し回数になるぞ。

 

 

 

②四則演算

計算結果には変数『繰り返し回数』を設定します。

計算式の左側には変数『最終行』を選択します。

真ん中は「-」を選択します。

右側には値「1」を設定します。

 

さあこれで今回の道場で作成する部分を網羅したぞ。

最後に動作確認といこうではないか!

この瞬間がいつもドキドキするんですよね…。
 

3.本日のシナリオまとめ

博士、ロータス君、お疲れ様です。

シナリオを実行して、社内システムのPOS取引履歴に、正しい形式でデータ転記されていれば本日の道場は完璧です!

 

 


補足

Tab移動がうまくいかない場合、WinActorの実行速度を遅くして実行してみてください。

WinActorの操作が早すぎて、ブラウザが反応できていない可能性があります。

WinActorメニューバーより、実行速度の調整が可能です。

通常:0

最大遅延:+10

 

現在のシナリオ作成状況…60%!

クリックで拡大表示されます。


 

関連記事こちらの記事も合わせてどうぞ。

最近の記事

カテゴリ

PAGETOP