SikuliX(xlrd)でExcelを読み込み全セルを取得する方法

 

★悩み★
・SikuliXでExcelファイルの読み込みってできるの?
・Excelの特定シートのみをSikuliXで読み込みできる?
・SikuliXのxlrdでExcelシート内の全セルを読み込みたい。



こういった「悩み」に答えます。
 

★本記事の内容★
① SikuliXでExcelを操作する方法
➁ 準備:SikuliXのインストールと起動
③ SikuliXのxlrdでExcelの読み込み



これからご紹介する「SikuliX(xlrd)でExcelを読み込み全セルを取得する方法」を実践したことで、30分以内で「SikuliXでExcel内のデータの読み込み」ができました。
 

記事の前半では「SikuliXでExcelを読み込みする3つの方法」を解説します。
記事の後半では「SikuliXのxlrdを使って、Excelを読み込みする方法」を紹介します。
 

この記事を読み終えることで、「SikuliXのxlrdと使って、Excelファイルを操作(読み込み)できる」状態になります。
 

★SikuliXとは★
SikuliX(シクリ)とは、画像認識を用いたGUI操作自動化ツールです。簡単な操作で「エクセル入力の自動化」などに利用できます。「検索ボックスに検索ワードを入力して検索ボタンを押す」などの操作を自動化できます。
さらに詳しく知りたい方には、以下の記事がオススメです。
>> 【要点解説】SikuliXとは?を解消!3ステップで入門する方法を解説



ちなみに、筆者が2週間でSikuliXを学んだ方法や手順について以下で公開しています。皆様の学習の参考になれば嬉しいです。

>> SikuliXに0から入門し操作を自動化するまでのロードマップを公開中

 

SikuliXでExcelを操作する方法


「SikuliXでExcelを操作する方法」に関してご紹介します。
 

SikuliXを使うことで、Excelファイルを操作(書き込みと読み込み)できます。実現方法に関して簡単に解説しますね。



SikuliXでExcelファイルを操作(書き込みと読み込み)したい場合、以下の3つの方法があります。
 

★SikuliXでExcelを操作(書き込みと読み込み)する3つの方法★
・SikuliXの「キー入力自動化」を利用
・SikuliXの「xlrd」ライブラリを利用
・SikuliXから「Pythonなどの外部スクリプト」を実行



上記「SikuliXでExcelを操作(書き込みと読み込み)する3つの方法」の各方法に対する「実現例」「メリット」「デメリット」に関して、以下に記載します。
 

★SikuliXの「キー入力自動化」を利用★
・実現例
 click(“Excelファイルのアイコン”) # Excelファイルを起動
 type(“a”, Key.CTRL) # 全選択
 type(“c”, Key.CTRL) # 全セルの値をコピー
・メリット
 プログラミングの知識がなくても実現できる
・デメリット
 Excelに大量データが記載されていた場合、自動化に時間がかかる

 

★SikuliXの「xlrd」ライブラリを利用★
・実現例
 book = xlrd.open_workbook(excel_filepath) # Excelファイルの読み込み
 sheet = book.sheet_by_index(2) # シートを指定
 for row in range(1, sheet.nrows): # 最大行で繰り返し
  print sheet.row_values(row) # 行の全セル値を表示
・メリット
 画像検索を使わないため、Excelアイコンの変化などに対応できる
・デメリット
 Pythonに関するプログラミング知識が必要

 

★SikuliXから「Pythonなどの外部スクリプト」を実行★
・実現例
 subprocess.Popen([実行コマンド, プログラムのPATH])
・メリット
 得意なプログラミング言語を利用できるため、短時間で自動化ができる
・デメリット
 プログラミングの知識が必要、保守範囲が広い



ぜひ、自分に合った方法で、SikuliXからExcelを操作しましょう。
 

本記事では、「xlrd」ライブラリを使ったExcelファイルの読み込み方法に関して解説します。



以上が、「SikuliXでExcelを操作する方法」となります。
 

準備:SikuliXのインストールと起動


「準備:SikuliXのインストールと起動」に関してご紹介します。
 

★SikuliXでExcelファイルを操作するための環境準備★
・SikuliX(2.0.5)のxlrdでExcelファイルを操作するとエラー発生
・SikuliX(2.0.4)をインストール



上記の流れで、「SikuliXでExcelファイルを操作するための環境準備」ができます。
 

上記の各手順は、以下の日時で動作確認済みです。
動作確認済み日時:2022年5月5日



以降で、上記「SikuliXでExcelファイルを操作するための環境準備」の各項目に関してご説明します。
 

SikuliX(2.0.5)のxlrdでExcelファイルを操作するとエラー発生

「SikuliX(2.0.5)のxlrdでExcelファイルを操作するとエラー発生」に関して説明します。
 

Sikulixのバージョン2.0.5だと、「xlrd」を使ったExcel操作ができません。



SikuliXのバージョン2.0.5で、以下の「Excelファイルを読み込みするプログラム」を実行してみましょう。
 

import xlrd

# ExcelファイルのPATH
excel_filepath = "sample.xlsx"

# Excelファイルの読み込み
book = xlrd.open_workbook(excel_filepath)



実行後、以下のエラーが表示されます。
 

[error] script [ excel ] stopped with error in line 7
[error] java.lang.ClassNotFoundException ( org.apache.xerces.parsers.SAXParser )
[error] --- Traceback --- error source first
line: module ( function ) statement 
91: expat (  __init__ )     self._reader = XMLReaderFactory.createXMLReader(_xerces_parser_name)
59: expat (  ParserCreate )     return XMLParser(encoding, namespace_separator)
1480: ElementTree (  __init__ )     parser = expat.ParserCreate(encoding, "}")
1205: ElementTree (  iterparse )     parser = XMLParser(target=TreeBuilder())
55: xlsx (  ensure_elementtree_imported )     ET.iterparse(_dummy_stream)
55: xlsx (  ensure_elementtree_imported )     ET.iterparse(_dummy_stream)
792: xlsx (  open_workbook_2007_xml )     ensure_elementtree_imported(verbosity, logfile)
130: __init__ (  open_workbook )     bk = xlsx.open_workbook_2007_xml(
7: main (  <module> )     book = xlrd.open_workbook(excel_filepath)
[error] --- Traceback --- end --------------



SikuliX(2.0.5)の公式サイトを確認したところ、「重大なバグ」と報告されています。
 

★本エラーについて★
・エラー内容
 xlrd.open_workbookを実行した際に、SAXParserクラスが見つかりません。
・原因
 SAXParserクラスが同梱されずにSikuliXのjarが生成されてしまった。
・対処/解決方法
 SikuliXのバージョン2.0.4を使う。
参照:SikuliX(2.0.5)のバグ報告サイト(公式サイト)



以降で、「SikuliX(2.0.4)をインストールする方法」に関して説明しますね。
 

以上が、「SikuliX(2.0.5)のxlrdでExcelファイルを操作するとエラー発生」となります。
 

SikuliX(2.0.4)をインストール

「SikuliX(2.0.4)をインストール」に関して説明します。
 

Excelファイルを操作するために、SikuliXのバージョン2.0.4をインストールしましょう。



まずは、以下の記事「Javaをインストール」を参照して、お使いのパソコンにJavaをインストールしてください。
>> 【Windows向け】SikuliXのインストール手順と基本的な使い方
>> 【Mac向け】SikuliXのインストール手順と基本的な使い方

 

Javaインストール後、SikuliX(2.0.4)のjarファイルをダウンロードするために、Webブラウザで以下にアクセスしましょう。
>> SikuliXのjarファイルがダウンロードできるサイト(公式サイト)

 

アクセス後、「sikulixide-2.0.4.jar」(下図の赤枠)をクリックして、「SikuliX(2.0.4)のjarファイル」をダウンロードしてください。
 

sikulix(2.0.4)のjarをダウンロード



ダウンロード後、以下の記事「SikuliXを起動」を参照して、SikuliX(2.0.4)を起動してみましょう。
>> 【Windows向け】SikuliXのインストール手順と基本的な使い方
>> 【Mac向け】SikuliXのインストール手順と基本的な使い方

 

sikulix(2.0.4)の起動画面



以上が、「SikuliX(2.0.4)をインストール」となります。
 

SikuliX(2.0.5)では、xlrdを用いてExcel操作するとエラーが発生します。
そのため、SikuliX(2.0.4)のxlrdを用いてExcel操作を実現させましょう。


 

SikuliXのxlrdでExcelの読み込み


「SikuliXのxlrdでExcelの読み込み」に関してご紹介します。
 

★SikuliXのxlrdでExcelを読み込むための流れ★
手順1:Excelファイルの読み込み
手順2:読み込み・操作したいシートを指定
手順3:読み込んだシートの最大行数を取得
手順4:繰り返し処理で全セルの読み込み
手順5:指定シート内の全セルの値を取得するプログラムの作成と実行



SikuliXの「xlrd」ライブラリを使うことで、「Excelのセル値の読み込み」を簡単に実現できます。
 

上記の各手順は、以下の日時と環境で動作確認済みです。
動作確認済み日時:2022年5月5日
動作確認済み環境:macOS Catalina



以降で、上記「SikuliXのxlrdでExcelを読み込むための流れ」の各手順に関してご説明します。
 

手順1:Excelファイルの読み込み

「手順1:Excelファイルの読み込み」に関して説明します。
 

SikuliXのxlrdでExcelを読み込むためには、「xlrd.open_workbook」を利用します。



「xlrd.open_workbook」の構文は、以下となります。
 

★xlrd.open_workbookのリファレンス★
・機能
 指定したExcelファイルをSikuliXで読み込む
・使い方
 変数= xlrd.open_workbook(‘ExcelファイルのPATH’)
・例
 book = xlrd.open_workbook(‘sample.xlsx’)
・実行結果
 SikuliXでsample.xlsxを読み込む
・参照
 xlrd.open_workbookのリファレンス(公式サイト)



以上が、「手順1:Excelファイルの読み込み」となります。
 

手順2:読み込み・操作したいシートを指定

「手順2:読み込み・操作したいシートを指定」に関して説明します。
 

SikuliXのxlrdで読み込み・操作したいシートを指定するためには、「sheet_by_index関数」を利用します。



「sheet_by_index」の構文は、以下となります。
 

★sheet_by_indexのリファレンス★
・機能
 操作(書き込み/読み込み)したいシートを設定する
・使い方
 変数= 変数.sheet_by_index(番号 or シート名)
・例
 sheet = book.sheet_by_index(2)
・実行結果
 左から2番目のシートを操作対象とする
・参照
 sheet_by_indexのリファレンス(公式サイト)



以上が、「手順2:読み込み・操作したいシートを指定」となります。
 

手順3:読み込んだシートの最大行数を取得

「手順3:読み込んだシートの最大行数を取得」に関して説明します。
 

SikuliXのxlrdで読み込みしたシートの最大行数を取得するためには、「nrows」を利用します。



「nrows」の構文は、以下となります。
 

★nrowsのリファレンス★
・機能
 操作(書き込み/読み込み)対象シートの最大行数を取得する
・使い方
 変数.nrows
・例
 print sheet.nrows
・実行結果
 操作対象シートの最大行数を表示する
・参照
 nrowsのリファレンス(公式サイト)



以上が、「手順3:読み込んだシートの最大行数を取得」となります。
 

手順4:繰り返し処理で全セルの読み込み

「手順4:繰り返し処理で全セルの読み込み」に関して説明します。
 

SikuliXのxlrdで読み込みしたシートの全セル値を出力するためには、「for」と「row_values」を利用します。



「row_values」の構文は、以下となります。
 

★row_valuesのリファレンス★
・機能
 指定した行内の全セル値を取得する
・使い方
 変数.row_values(行番号)
・例
 for row in range(1, sheet.nrows):
  print sheet.row_values(row)
・実行結果
 操作対象シート内に記載された全セル値を表示する
・参照
 row_valuesのリファレンス(公式サイト)



ちなみに、「for」の構文を知りたい方は、以下の記事をご覧ください。
>> SikuliXのforとwhileで繰り返し実行(loop)
 

以上が、「手順4:繰り返し処理で全セルの読み込み」となります。
 

手順5:指定シート内の全セルの値を取得するプログラムの作成と実行

「手順5:指定シート内の全セルの値を取得するプログラムの作成と実行」に関して説明します。
 

手順1から手順4で紹介した関数を用いて、指定シート内の全セルの値を取得するプログラムを作成してみましょう。



今回は、以下のExcelファイルの左から2番目のシート内の全セル値を取得してみます。


起動したSikuliX上において、以下のプログラムを作成してください。
 

import xlrd

# ExcelファイルのPATH
excel_filepath = "sample.xlsx"

# Excelを開く
book = xlrd.open_workbook(excel_filepath)

# シートを指定(今回は、左から2番目のシートを選択)
sheet = book.sheet_by_index(2)

# Excelシートの情報を出力
for row in range(1, sheet.nrows):
    print sheet.row_values(row)

 

上記で使った関数を詳しく知りたい方は、以下の記事をご覧ください。
・for()について
 >> SikuliXのforとwhileで繰り返し実行(loop)



プログラム作成後、SikuliX上の「実行」ボタンをクリックします。

クリック後、下の画像のように、SikuliXのxlrdを使うことで、指定シート内の全セルの値を取得できます。
 

SikuliXのxlrdでExcel読み込みした結果



以上が、「手順5:指定シート内の全セルの値を取得するプログラムの作成と実行」となります。
 

SikuliXのxlrdライブラリを使うことで、Excelの読み込み操作を自動化できます。


 

ちなみに、「SikuliXをシステムで利用する場合の注意点」や「SikuliXでAndroidを操作する方法」などを知りたい方には、以下の記事で紹介している本がオススメです。
>> 【入門者向け】SikuliXの勉強に役に立つオススメ書籍3冊

 

【まとめ】SikuliX(xlrd)でExcelを読み込み全セルを取得する方法


いかがでしたでしょうか?
SikuliXの「xlrd」ライブラリを使って、Excelファイルに記載された全セルの値を読み込む方法を解説し、以下の悩みを解決しました。
 

★悩み★
・SikuliXでExcelファイルの読み込みってできるの?
・Excelの特定シートのみをSikuliXで読み込みできる?
・SikuliXのxlrdでExcelシート内の全セルを読み込みたい。



Excelの読み込み操作を自動化したい場合、SikuliXの利用を検討してみてください。

コメント