【Sikuli/Sikulix】Excelファイルを読み込んで自動登録する方法

Excelファイルを読み込んでその値をもとに自動登録を行う方法についてご説明します。

 

Sikuliインストール方法はこちら

Sikuli基本操作はこちら

 

スポンサーリンク

Sikuliの起動

 

Sikuliインストール時に作成した「Sikuli」フォルダ内にある、runsikulixという名前のWindowsコマンドスクリプトをダブルクリックで起動させます。黒いコマンドプロンプト画面が表示されますが、下記画面が立ち上がるまでお待ちください。

 

Excelファイルを読み込んで自動登録

以下にExcelファイルを読み込んで自動登録するためのSikuli記載方法を詳しくご説明していきます。詳しい説明は不要でコードの記載方法だけを確認されたい方は下部に記載のサンプルプログラムをご覧ください。

 

 

①「xlrd」のインポート

まずExcelファイルを読み込んで利用するためには、「xlrd」をインポートする必要があります。

 

【記載するコード】

import xlrd

②エクセルファイルを読み込む

エクセルファイルを読み込む方法として、「ファイル名を指定して読み込む方法」「絶対パスを指定して読み込む方法」「ファイル選択して読み込む方法」の3つがあります。

ファイル名を指定して読み込む方法

runsikulix.cmdが保存されているフォルダに例として「sample.xlsx」を保存すると、下記のコードでファイル名を指定して読み込むことができます。

 

【記載するコード】

filename = “sample.xlsx”
openfile = xlrd.open_workbook(filename)

※注意:コードをコピーしてsikuliにペーストした場合、「”」が正しく認識されない場合があります。エラーになる場合は、「”」を消して入力しなおしてください。

 

絶対パスを指定して読み込む方法

デスクトップ上や、特定のフォルダ内など、常に一定の場所にExcelファイルが保存されている場合、その絶対パスを指定して読み込むことができます。

以下にデスクトップに「sample2.xlsx」と保存されるファイルを読み込む際の記載コードを示します。

 

【記載するコード】

filename = “C:\\Users\\ZZZZ(アカウント名等)\\Desktop\\sample2.xlsx”
openfile = xlrd.open_workbook(filename)

※\はSikuli上では「バックスラッシュ」で表示されます

※バックスラッシュが連続して2つ並ぶのが特徴です

※注意:コードをコピーしてsikuliにペーストした場合、「”」が正しく認識されない場合があります。エラーになる場合は、「”」を消して入力しなおしてください。

ファイル選択して読み込む方法

一定の場所に保存されていなかったり、ファイル名が都度違ったりする場合、ファイル選択ダイアログを表示し、選択されたファイルを読み込むことができます。

 

【記載するコード】

filename = popFile()
openfile = xlrd.open_workbook(filename)

 

※Windowsのバージョンによっては、Excelファイルの読み込み時にエラーとなる場合があります。その場合は「Sikuli」フォルダ内にある、runsikulixという名前のWindowsコマンドスクリプトを右クリックし、管理者として実行して起動させてみてください。

③読み込むシートを指定する

ExcelはSheet1、Sheet2など複数のシートを追加できます。読み込む値がどのシートに記載されているのか指定を行います。ここではSheet1に読み込むデータを記載したので、Sheet1を指定します。

Sheet1の場合はindex(0)、Sheet2の場合はindex(1)のように指定します。

 

【記載するコード】

sheet_1 = openfile.sheet_by_index(0)

④読み込んだシートの行数を取得する

読み込んだシートの行数分自動登録処理を繰り返すため、読み込んだエクセルシートに記載されている行数を取得します。

 

【記載するコード】

gyousuu = sheet_1.nrows

⑤繰り返し処理に指定する回数を考える

Sikuliにて繰り返し処理を行う際、0から開始し、1回処理が終了するごとに1が加算され、「指定する数値」となるまで繰り返されることとなります。「指定する数値」となった時点でFor文内の処理は行われなくなります。ここでは「指定する数値」を考えます。

仮に登録されたエクセルの行数が4行とすると、繰り返し処理を行いたい回数は1番上の項目部分を含まない3回となると思います。

繰り返しは0からカウントされるので、0、1、2とカウントし、3となった時点でFor文内の処理が行われなければ、0~2まで計3回処理が繰り返されたことになります。そのため、「指定する数値」は【行数-1】である必要があります。ここではsyorikaisuuという変数に「指定する数値」を格納します。

 

【記載するコード】

syorikaisuu = gyousuu – 1

⑥繰り返し処理を記載する

繰り返し文としてFor文を利用します。変数「num」(0)から変数「syorikaisuu」(3)まで、つまり3回処理を繰り返す記載とします。続いて繰り返ししたい処理を記載することとなります。numは1回処理を行う毎に1ずつ加算されていきます。

 

【記載するコード】

for num in range(syorikaisuu):

以下繰り返す処理を記載する

⑦Excelから値を読み込む

Excelから値を読み込む場合、どのセルの値を読み込むのか指定する必要があります。セルは下記の通り表現されます。

例えば、セルB2の値を読み込みたい場合、sheet_1.cell(1,1).valueとなります。基本的に行数分処理を繰り返すと思いますので、列BのB2からB4まで繰り返し読み込む場合、for文「for num in range(syorikaisuu):」以降に変数「num」を利用して下記の通り記載するのがよいでしょう。

 

【記載するコード】

for num in range(syorikaisuu):
paste(値入力先の画像,sheet_1.cell(num+1,1).value)

※なお、Excelに入力されている値が数値の場合、paste()で扱うのは文字列のためエラーとなってしまいます。str(sheet_1.cell(num+1,1).value)とすることで文字列として読み込ませることができます。

Excelファイル読み込みによる自動化サンプルプログラム

以下のサンプルデータを自動登録していきます。

以下の入力フォームに2行目から順に1行ずつ登録を繰り返すサンプルプログラムです。

なお、値が入る前に登録ボタンを押してしまったり、登録ボタン押下がきちんとされる前にSikuliのプログラムが終了してしまったりするため、wait(1)の様に1秒まってから次の動作に移行するといった調整が必要となります。

Sikuliプログラムの注意点は、常に正確な動作はしないということです。たまにうまく値がペーストされなかったりすることがあります。そのため、間違いが許されない重要なデータ入力の自動化にはあまりお勧めしません。(自動入力後、値入力が誤っていないか後程確認するのであればよいと思いますが。)

【サンプルプログラム】

※Windowsのバージョンによっては、Excelファイルの読み込み時にエラーとなる場合があります。その場合は「Sikuli」フォルダ内にある、runsikulixという名前のWindowsコマンドスクリプトを右クリックし、管理者として実行して起動させてみてください。

スポンサーリンク