UWSCを使ってExcelの明細データをWebのシステムに自動で入力させたい!
UWSC講座3回目は、いよいよ実用的な自動化を行います。Excelに入力された明細データをWebシステムに連続して入力させてみます。事務処理を多くこなす部署では、ありがちな作業で、手入力の場合、目視チェック作業などが大変で業務を圧迫しているかと思います。
処理の流れ
- Excelを起動してデータを読み込む
- IEを起動してWebシステムに1明細のデータを入力
- 明細数分、繰り返す
処理の説明
Excelの起動
////Excelからデータを読み込み、IEを起動してフォームに文字を入力する////
// ExcelファイルPathを設定
Const eFilePath="*****\data.xlsx"
// 最大行数、列数の指定
Const MAX_ROW=5
Const MAX_COL=6
// URLを設定
Const url="https://takashi002013.com/contact/"
Dim data[MAX_ROW][MAX_COL]
// Excelの起動
oExcel = CreateOLEObj("Excel.Application")
oExcel.visible = True //可視化
まずは、Excelを起動させます。4行目のConstで開くファイル名を指定しています。
7、8行目は、データの最大行数、列数の指定です。使用するデータに合わせて変更してください。11行目は入力するWebシステムのURLで、前回同様に当ブログのお問い合わせフォームを使用しています。
13行目のdata[][]は、読み込んだデータを格納する2次元配列です。
16行目のoExcel = CreateOLEObj(“Excel.Application”)でExcelのオブジェクトを作成しています。
17行目のvisible=trueでExcelを可視化しています。バックグラウンドで処理させたい場合などは、falseに設定するとよいでしょう。
データの読み込み
Try
//指定したファイルのオープン
oExcel.Workbooks.open(eFilePath)
Except
// ファイルが見つからない場合のエラー処理
Msgbox("Excelファイルが見つかりません")
//このプログラムを終了
EXITEXIT
EndTry
//左上のセルの選択(1行目はヘッダ行のため無視)
oExcel.Cells(2,1).Select
// データを読み込み
For i=0 To MAX_ROW
For j=0 To MAX_COL
//回りくどいがActiveCellをOffsetで移動させるという方式
data[i][j]=oExcel.ActiveCell.Offset(i,j).Value
Next
Next
// Excelを閉じる
id = HNDtoID( oExcel.hwnd )
CtrlWin(id,Close)
1~10行目のTry~Except~EndTryでエラー処理を行っています。3行目のoExcel.Workbooks.open(eFilePath)はファイルを開く処理ですが、ファイルが存在しない場合は、エラーとなり処理が終了するようにしています。open関数は、第一引数に開きたいファイルのフルPathを指定します。
Msgbox([表示するメッセージ])で画面でポップアップを表示することができます。9行目のEXITEXITは、スクリプトを終了させる関数です。
13行目のoExcel.Cells(2,1).Selectで、読み込みたいデータの始まりのセルを指定しています。今回は、1行目はヘッダ行としているため、2行目の一番左を指定しています。
16行~20行目のFor~Nextでループを回し、データを配列に格納しています。2重のForループとしていて、内側のループ(j)で列方向に処理を繰り返し、外側のループ(i)で行方向に処理を繰り返しています。この2つを組み合わせることで、下の図のように表のデータを順番に配列に格納しています。
Excelを閉じるために、id = HNDtoID( oExcel.hwnd )でExcelオブジェクトのIDを取得し、CtrlWin(id,Close)で閉じる処理を行っています。
IEを使用しWebフォームにデータを入力
// IEを起動する
FUKIDASI("IE起動中")
ie = CreateOLEobj("InternetExplorer.Application")
// IEを表示させる
ie.visible = true
// 左上に表示させる
id = HNDtoID( ie.hwnd )
ACW( id, 0, 0 )
// IEを最大化表示
CtrlWin( id, MAX )
// URLを表示
FUKIDASI("Webサイトを表示")
ie.navigate( url )
waitIE( ie )
// Webサイトに情報を入力
For i=0 To MAX_ROW
FUKIDASI((i+1)+"行目のデータをWebサイトに入力中")
IESetData(ie,True,"contact-kind",data[i][0]) // ラジオボタン選択
IESetData(ie,data[i][1],"your-name") // テキスト入力
IESetData(ie,data[i][2],"your-email") // テキスト入力
IESetData(ie,data[i][3],"your-subject") // テキスト入力
IESetData(ie,data[i][4],"your-message") // テキスト入力
Sleep(5)
//送信ボタンクリック(Tab+Enter)
ScKey(id,VK_TAB,VK_RETURN)
Sleep(5)
Next
Sleep(5)
//IEを終了
ie.Quit
//IESetData(ie,"TAG=input",1) // ボタン
//SetSlider(id,GetSlider(id)+10)
//Sleep(3)
//clickIMG("send.bmp")
//IESetData(ie,True,"PC","Yes") // RADIO
//IESetData(ie,"コメントテスト","comment") // TEXTAREA
// IEが完全に立ち上がるまでの間、待ち続ける
Procedure waitIE( ie)
repeat
Sleep( 0.1 )
until ( ! ie.Busy ) and ( ie.ReadyState = 4 )
Sleep( 0.2 )
Fend
1~19行目までは、IEを起動し、指定したWebフォームを表示させる処理です。詳細は第二回講座をご覧ください。
For~Nextで1明細づつデータを入力しています。入力するデータとしてExcelデータを格納した配列data[][]を指定しています。
それ以降の処理も前回と同様ですので、詳細を知りたい方は第二回講座をご参照ください。
完成版コード
以下が完成したコードです。
////Excelからデータを読み込み、IEを起動してフォームに文字を入力する////
// ExcelファイルPathを設定
Const eFilePath="C:\Users\user\Documents\GitHub\uwsc\UWSC\data.xlsx"
// 最大行数、列数の指定
Const MAX_ROW=5
Const MAX_COL=6
// URLを設定
Const url="https://takashi002013.com/contact/"
Dim data[MAX_ROW][MAX_COL]
// Excelの起動
oExcel = CreateOLEObj("Excel.Application")
oExcel.visible = true //可視化
Try
//指定したファイルのオープン
oExcel.Workbooks.open(eFilePath)
Except
// ファイルが見つからない場合のエラー処理
Msgbox("Excelファイルが見つかりません")
//このプログラムを終了
EXITEXIT
EndTry
//左上のセルの選択(1行目はヘッダ行のため無視)
oExcel.Cells(2,1).Select
// データを読み込み
For i=0 To MAX_ROW
For j=0 To MAX_COL
//回りくどいがActiveCellをOffsetで移動させるという方式
data[i][j]=oExcel.ActiveCell.Offset(i,j).Value
Next
Next
// Excelを閉じる
id = HNDtoID( oExcel.hwnd )
CtrlWin(id,Close)
// IEを起動する
FUKIDASI("IE起動中")
ie = CreateOLEobj("InternetExplorer.Application")
// IEを表示させる
ie.visible = true
// 左上に表示させる
id = HNDtoID( ie.hwnd )
ACW( id, 0, 0 )
// IEを最大化表示
CtrlWin( id, MAX )
// URLを表示
FUKIDASI("Webサイトを表示")
ie.navigate( url )
waitIE( ie )
// Webサイトに情報を入力
For i=0 To MAX_ROW
FUKIDASI((i+1)+"行目のデータをWebサイトに入力中")
IESetData(ie,True,"contact-kind",data[i][0]) // ラジオボタン選択
IESetData(ie,data[i][1],"your-name") // テキスト入力
IESetData(ie,data[i][2],"your-email") // テキスト入力
IESetData(ie,data[i][3],"your-subject") // テキスト入力
IESetData(ie,data[i][4],"your-message") // テキスト入力
Sleep(5)
//送信ボタンクリック(Tab+Enter)
ScKey(id,VK_TAB,VK_RETURN)
Sleep(5)
Next
Sleep(5)
//IEを終了
ie.Quit
//IESetData(ie,"TAG=input",1) // ボタン
//SetSlider(id,GetSlider(id)+10)
//Sleep(3)
//clickIMG("send.bmp")
//IESetData(ie,True,"PC","Yes") // RADIO
//IESetData(ie,"コメントテスト","comment") // TEXTAREA
// IEが完全に立ち上がるまでの間、待ち続ける
Procedure waitIE( ie)
repeat
Sleep( 0.1 )
until ( ! ie.Busy ) and ( ie.ReadyState = 4 )
Sleep( 0.2 )
Fend
動作の様子
Excelの処理が一瞬で終わってしまいますが、Excelから明細データを読み取り、Webフォームに入力しています。
まとめ
第三回のUWSC講座として、実用的なExcelデータからWebフォームに自動入力する方法を紹介しました。本処理を応用すれば、業務上の様々な場面で自動化ができると思います。
第4回は、音声認識や画像認識を活用した企画を検討していますので、ご期待ください。
コメント