![見出し画像](https://assets.st-note.com/production/uploads/images/129493554/rectangle_large_type_2_80cff769c660da962ae0a74a42a8c350.png?width=1200)
システム画面への入力とExcel へのデータ取得のサンプル【UWSC】
システム画面への入力とExcel へのデータ取得のサンプル
なるべくシンプルな構成で「システム画面への入力とExcel へのデータ取得のサンプル」とするため、どなたでも再生して確認できるように「電卓」を他のシステム画面と見たて、1から100までの数値を送信して加算、一回ごとの算出結果を Excel に入力するというサンプルです。
使い方
下部のコード部分をコピーしてメモ帳にぺースト、拡張子を「.uws」として保存し、読込み、再生してください。
このサンプルで確認できること
UWSC でこのような処理を行う場合、Excel をアクティブにする必要はないということを確認できると思います。
//-----------------------------------------------------------------------
//ガード条件
//-----------------------------------------------------------------------
NUM = GETALLWIN() //ウィンドウ数の取得
SONZAI=0 //存在フラグの初期化
FOR i = 0 TO (LENGTH(ALL_WIN_ID) - 1) //全ウィンドウ数だけ繰り替えず
if pos("Excel",STATUS(ALL_WIN_ID[i],ST_TITLE))>0 then //Excel を含む画面名があれば
SONZAI=1 //存在フラグを1にします
Excel=GETACTIVEOLEOBJ("Excel.Application") //COMオブジェクトを扱うときのお約束
endif
NEXT
if SONZAI=1 THEN //存在フラグが1だった場合
//何もしない
else //存在フラグが1ではない場合
MSGBOX("Excel が見つかりません") //「Excel が見つかりません」と言い
exitexit //処理を終了します
endif
//----------------------------------------------------------------------
Dim 開始秒 = GetTime() //開始時刻の取得
//----------------------------------------------------------------------
// アクティブにする、なければ起動する
if GETID("電卓","ApplicationFrameWindow", 0.1) < 0 then EXEC("calc")
id=GETID("電卓","ApplicationFrameWindow",-1) //IDを取得できるまで待つ
REPEAT
SLEEP(0.02)
CTRLWIN(id, ACTIVATE) // IDの画面をアクティブにする
UNTIL STATUS(id, ST_ACTIVE) // IDの画面がアクティブなるまで待機
clkitem(id,"クリア",CLK_ACC) //初期化 //クリアのボタンを押す
for r =1 TO 100 //※任意に設定 //指定数だけ繰り返す
clkitem(id,"プラス",CLK_BTN) //プラスのボタンを押す
for digits = 1 TO LENGTH(r) //桁数だけ繰り返す
NUM=COPY(r,digits,1) //各桁の数値を取得
clkitem(id,NUM,CLK_BTN) //各数値を押す
NEXT
clkitem(id,"等号",CLK_BTN) //イコールのボタンを押す
Excel.ActiveSheet.Cells(r,1).Value = r //A(1)列:行数
Excel.ActiveSheet.Cells(r,2).Value = getstr(id,3,STR_STATIC) //B(2)列:結果
NEXT
//----------------------------------------------------------------------
Dim 現在秒 = GetTime() //終了時刻の取得
print 現在秒-開始秒 +"秒" //差の計算
//----------------------------------------------------------------------
//----------------------------------------------------------------------
//MSGBOX("中断!")
//exitexit
//----------------------------------------------------------------------
MSGBOX("完了しました!")
余談になりますが
こうしたサンプルでも、ガード条件は設定したほうがいいなとか、処理時間の計測も欠かせないものだし、どこにでも中断を入れられるように最後の方にメッセージボックスと強制終了が無効化してあるのはいつもの仕様です。