見出し画像

システム画面へのデータ入力と検索、結果のExcel へのデータ取得のサンプル【UWSC】

システム画面へのデータ入力と検索、Excel へのデータ取得のサンプル
なるべくシンプルな構成で「システム画面へのデータ入力と検索、結果のExcel へのデータ取得のサンプル」とするため、どなたでも再生して確認できるように「文字コード表」を他のシステム画面と見たて、入力エリアにデータを送信、「検索」ボタンを押下し、結果を Excel に入力するというサンプルを計画しました。

2工程になります
ただし、文字コード表へのデータ入力は、何を入れても検索できるわけではないため、検索用のデータをあらかじめ取得しなければなりません。そのため、まずはテスト用のデータを取得して、その後取得したデータを利用して入力、検索といった処理を試みます。というわけで、まずは Excel を起動して新しいブックを開いておきます。その後「テスト用のデータを取得するプログラム」をコピーして「○○.uws」として保存、UWSC で「読込み」、「再生」してください。
同様に、「システム画面へのデータ入力と検索、結果のExcel へのデータ取得のサンプル」でもコピーして「△△.uws」として保存、UWSC で「読込み」、「再生」してください。

テスト用のデータを取得するプログラム

//----------------------------------------------------------------------
//アプリの起動
//----------------------------------------------------------------------
if GETID("文字コード表","#32770", 0.1) < 0 then EXEC("charmap")	//■■■
//----------------------------------------------------------------------
//ガード条件1(対象のウィンドウ)
//----------------------------------------------------------------------
GETALLWIN() //全ウィンドウ数の取得
FLAG=0
FOR i = 0 TO (LENGTH(ALL_WIN_ID) - 1) 
 if pos("文字コード表",STATUS(ALL_WIN_ID[i],ST_TITLE))>0  then	//
 FLAG=1
 ENDIF
NEXT
IF FLAG=1 THEN
 //MSGBOX("対象のウィンドウ名1 が見つかりました") // 画面がない処理
 //PRINT "あり(例:何もしない)"
ELSE
 MSGBOX("文字コード表 が見つかりません") // 画面がない処理	//
 EXITEXIT
ENDIF
//----------------------------------------------------------------------
//ガード条件2(例:EXCEL を使う場合)
//----------------------------------------------------------------------
GETALLWIN() //全ウィンドウ数の取得
FLAG=0
FOR i = 0 TO (LENGTH(ALL_WIN_ID) - 1) 
 IF pos("- Excel",STATUS(ALL_WIN_ID[i],ST_TITLE))>0  then
 FLAG=1
 ENDIF
NEXT
IF FLAG=1 THEN
 //MSGBOX("Excel が見つかりました") // 画面がない処理
 //PRINT "あり(例:何もしない)"
ELSE
 MSGBOX("Excel が見つかりません!") // 画面がない処理
 PRINT "なし(例:メッセージボックスを表示)"
 EXITEXIT
ENDIF
//----------------------------------------------------------------------
TIME1=GetTime()	//開始時
//----------------------------------------------------------------------
//----------------------------------------------------------------------
//最終レコードを把握する(例)
//----------------------------------------------------------------------
Excel=GETACTIVEOLEOBJ("Excel.Application")
//最後のセルを選択
//EXCEL.Sheets("Sheet1").Select	 // シートを指定する場合
EXCEL.Range("A1048576").Select	 // A列の最終行を取得する場合の最終行
EXCEL.ActiveCell.End(-4162).Select //上へ
//MAXROW= EXCEL.ActiveCell.Row
//----------------------------------------------------------------------
//開始、終了レコード指定(例)
//----------------------------------------------------------------------
a=1	//開始行初期値:2
z=100	//終了行初期値:MAXROW
a = INPUT("「開始行」を入力してください。", a)
IFB VARTYPE(a) = VAR_EMPTY
MSGBOX("キャンセルされました。")
PRINT "キャンセルされました。"
EXITEXIT
ELSEIF VAL(a) = ERR_VALUE
PRINT "無効な値です:a"
ENDIF

z = INPUT("「終了行」を入力してください。", z)
IFB VARTYPE(z) = VAR_EMPTY
MSGBOX("キャンセルされました。")
PRINT "キャンセルされました。"
EXITEXIT
ELSEIF VAL(z) = ERR_VALUE
PRINT "無効な値です:z"
ELSE	//有効な値が指定された場合に実行される処理を以降に記述
//----------------------------------------------------------------------
//対象のウィンドウ名1 に対する処理(例)
//----------------------------------------------------------------------
id=GETID("文字コード表", , -1)		//■■■電卓へ
//**********************************************************************
ActivateWindow(id)	 // アクティブにする
//**********************************************************************
//----------------------------------------------------------------------
//初期化(例)
//----------------------------------------------------------------------
if chkbtn(id,"リセット",1,FALSE)=0 then
CLKITEM(id,"リセット",CLK_BTN)	//ボタン名で押せる場合
ENDIF

clkitem(id,"MS ゴシック",CLK_LIST)

BTN(LEFT,CLICK,200+STATUS(ID,ST_X), 200+STATUS(ID,ST_Y))	
SCKEY(ID,VK_HOME,VK_PRIOR)
//----------------------------------------------------------------------
//FOR ~ NEXT で処理する(例)
//----------------------------------------------------------------------
FOR r = a TO z	//FOR ~ NEXT 開始
//----------------------------------------------------------------------
Fukidasi (r)
getitem(id,ITM_ACCCLK)
array = SPLIT(ALL_ITEM_LIST[0], ":")
Excel.ActiveSheet.Cells(r,1).Value=array[0]
Excel.ActiveSheet.Cells(r,2).Value=trim(array[1])
SCKEY(id,VK_RIGHT)

//----------------------------------------------------------------------
NEXT	//FOR ~ NEXT 終了
//----------------------------------------------------------------------
ENDIF	//有効な値が指定された場合に実行される処理を以前に記述
//----------------------------------------------------------------------

//----------------------------------------------------------------------
//時間計測
//----------------------------------------------------------------------
PRINT "---------------------"
TIME2=GetTime()	//終了時
PRINT (TIME2-TIME1)+"秒"
//----------------------------------------------------------------------
//メッセージボックス(完了時にメッセージを出す)
//----------------------------------------------------------------------
Fukidasi()
MSGBOX("完了しました!")

//----------------------------------------------------------------------
//  [ 機能 ]
// 指定のウィンドウタイトルのウィンドウをトップレベルウィンドウにします
//
//----------------------------------------------------------------------
//**********************************************************************
PROCEDURE ActivateWindow(id)
//**********************************************************************
REPEAT
SLEEP(0.02)
CTRLWIN(id, ACTIVATE) // アクティブにする
UNTIL STATUS(id, ST_ACTIVE)
SLEEP(0.1)
//**********************************************************************
FEND
//**********************************************************************

A(1)列とB(2)列に値は出力されましたでしょうか!?

システム画面へのデータ入力と検索、結果のExcel へのデータ取得のサンプル

//----------------------------------------------------------------------
//アプリの起動
//----------------------------------------------------------------------
if GETID("文字コード表","#32770", 0.1) < 0 then EXEC("charmap")	//■■■
//----------------------------------------------------------------------
//ガード条件1(対象のウィンドウ)
//----------------------------------------------------------------------
GETALLWIN() //全ウィンドウ数の取得
FLAG=0
FOR i = 0 TO (LENGTH(ALL_WIN_ID) - 1) 
 if pos("文字コード表",STATUS(ALL_WIN_ID[i],ST_TITLE))>0  then	//
 FLAG=1
 ENDIF
NEXT
IF FLAG=1 THEN
 //MSGBOX("対象のウィンドウ名1 が見つかりました") // 画面がない処理
 //PRINT "あり(例:何もしない)"
ELSE
 MSGBOX("文字コード表 が見つかりません") // 画面がない処理	//
 EXITEXIT
ENDIF
//----------------------------------------------------------------------
//ガード条件2(例:EXCEL を使う場合)
//----------------------------------------------------------------------
GETALLWIN() //全ウィンドウ数の取得
FLAG=0
FOR i = 0 TO (LENGTH(ALL_WIN_ID) - 1) 
 IF pos("- Excel",STATUS(ALL_WIN_ID[i],ST_TITLE))>0  then
 FLAG=1
 ENDIF
NEXT
IF FLAG=1 THEN
 //MSGBOX("Excel が見つかりました") // 画面がない処理
 //PRINT "あり(例:何もしない)"
ELSE
 MSGBOX("Excel が見つかりません!") // 画面がない処理
 PRINT "なし(例:メッセージボックスを表示)"
 EXITEXIT
ENDIF
//----------------------------------------------------------------------
TIME1=GetTime()	//開始時
Fukidasi("処理中")
//----------------------------------------------------------------------
//----------------------------------------------------------------------
//最終レコードを把握する(例)
//----------------------------------------------------------------------
Excel=GETACTIVEOLEOBJ("Excel.Application")
//最後のセルを選択
//EXCEL.Sheets("Sheet1").Select	 // シートを指定する場合
EXCEL.Range("B1048576").Select	 // A列の最終行を取得する場合の最終行
EXCEL.ActiveCell.End(-4162).Select //上へ
//MAXROW = EXCEL.ActiveCell.Row		//最終行
//PRINT "MAXROW:"+ MAXROW
//----------------------------------------------------------------------
//開始、終了レコード指定(例)
//----------------------------------------------------------------------
a=1	//開始行初期値:2
z=30	//終了行初期値:MAXROW
a = INPUT("「開始行」を入力してください。", a)
IFB VARTYPE(a) = VAR_EMPTY
MSGBOX("キャンセルされました。")
PRINT "キャンセルされました。"
EXITEXIT
ELSEIF VAL(a) = ERR_VALUE
PRINT "無効な値です:a"
ENDIF

z = INPUT("「終了行」を入力してください。", z)
IFB VARTYPE(z) = VAR_EMPTY
MSGBOX("キャンセルされました。")
PRINT "キャンセルされました。"
EXITEXIT
ELSEIF VAL(z) = ERR_VALUE
PRINT "無効な値です:z"
ELSE	//有効な値が指定された場合に実行される処理を以降に記述
//----------------------------------------------------------------------
//対象のウィンドウ名1 に対する処理(例)
//----------------------------------------------------------------------
id=GETID("文字コード表", , -1)		//■■■電卓へ
//**********************************************************************
ActivateWindow(id)	 // アクティブにする
//**********************************************************************
WHILE !CHKBTN(ID, "詳細表示")
	CLKITEM(id,"詳細表示",CLK_BTN)
WEND
//----------------------------------------------------------------------
//初期化(例)
//----------------------------------------------------------------------
if chkbtn(id,"リセット",1,FALSE)=0 then
CLKITEM(id,"リセット",CLK_BTN)	//ボタン名で押せる場合
ENDIF

clkitem(id,"Arial",CLK_LIST)

clkitem(id,"Windows: 日本語",CLK_LIST)

//----------------------------------------------------------------------
//FOR ~ NEXT で処理する(例)
//----------------------------------------------------------------------
FOR r = a TO z	//FOR ~ NEXT 開始
//----------------------------------------------------------------------
c2=Excel.ActiveSheet.Cells(r,2).Value
Fukidasi (r)
REPEAT
sendstr(id,C2,3,TRUE,TRUE)
UNTIL getstr(id,3,STR_ACC_EDIT)=c2

SCKEY(id,VK_TAB,VK_SHIFT,VK_TAB)

REPEAT
SLEEP(0.03)
UNTIL clkitem(id,"検索",CLK_BTN)=0

if clkitem(id,"検索",CLK_BTN)=0 then
clkitem(id,"検索",CLK_BTN)	//ボタン名で押せる場合
ENDIF

REPEAT
SLEEP(0.03)
UNTIL chkbtn(id,"リセット",1,FALSE)=0

getitem(id,ITM_ACCCLK)
array = SPLIT(ALL_ITEM_LIST[0], ":")
Excel.ActiveSheet.Cells(r,3).Value=array[0]
Excel.ActiveSheet.Cells(r,4).Value=trim(array[1])

REPEAT
SLEEP(0.03)
UNTIL Excel.ActiveSheet.Cells(r,4).Value<>""

if chkbtn(id,"リセット",1,FALSE)=0 then
CLKITEM(id,"リセット",CLK_BTN)	//ボタン名で押せる場合
ENDIF

//----------------------------------------------------------------------
NEXT	//FOR ~ NEXT 終了
//----------------------------------------------------------------------
ENDIF	//有効な値が指定された場合に実行される処理を以前に記述
//----------------------------------------------------------------------

//----------------------------------------------------------------------
//時間計測
//----------------------------------------------------------------------
PRINT "---------------------"
TIME2=GetTime()	//終了時
PRINT (TIME2-TIME1)+"秒"
//----------------------------------------------------------------------
//メッセージボックス(完了時にメッセージを出す)
//----------------------------------------------------------------------
Fukidasi()
MSGBOX("完了しました!")
//----------------------------------------------------------------------
//  [ 機能 ]
// 指定のウィンドウタイトルのウィンドウをトップレベルウィンドウにします
//
//----------------------------------------------------------------------
//**********************************************************************
PROCEDURE ActivateWindow(id)
//**********************************************************************
REPEAT
SLEEP(0.02)
CTRLWIN(id, ACTIVATE) // アクティブにする
UNTIL STATUS(id, ST_ACTIVE)
SLEEP(0.1)
//**********************************************************************
FEND
//**********************************************************************

C(3)列とD(4)列に値は出力されましたでしょうか!?

実際に動くサンプルがあれば、その後に独自のシステムへチャレンジしていく際の参考になるのではないかと思い計画しました。

詳細については『「システム画面へのデータ入力と検索、結果のExcel へのデータ取得のサンプル」について』という記事で、解説をしています。

有料エリアには何も情報がありません
記事を評価してくれた方はサポートもお願いします

誰もが無料でWindows自動化を始め、生産性を向上し続けられるようにする」


ここから先は

15字

¥ 100

この記事が気に入ったらサポートをしてみませんか?