超丁寧UWSC入門講座③:Excel明細データを読み取りIEを使ったWebフォームへ自動入力する方法

UWSC

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フォームに自動入力する方法

まとめ

第三回のUWSC講座として、実用的なExcelデータからWebフォームに自動入力する方法を紹介しました。本処理を応用すれば、業務上の様々な場面で自動化ができると思います。

第4回は、音声認識や画像認識を活用した企画を検討していますので、ご期待ください。

コメント

タイトルとURLをコピーしました