exl18.exeについて

〜 rubyなしでExcel操縦rubyスクリプトを実行 〜

最終更新日: 2015/07/12

 当サイトは、exl18.zipに含まれている exl18.exe に関する解説です。

 関連パッケージとして下のものもあるので、必要に応じてダウンロードして下さい。

 2015年4月25日版 → 7月12日版の変更点は次のとおり。

  1. MS-Word自動操縦用ライブラリ wrdap.rb のバグ修正版 ver 1.06 を組み込んだ。
  2. 実行するrubyスクリプトに関するエラーメッセージが正しく出力されないケースがあったのを修正。
  3. exl18.exeと同じディレクトリにreference.docxがあると、pandoc.exe実行時に参照するようにした。
  4. CD/DVDにexl18.exeがあるとき、エラーが発生してしまうバグを修正。

詳細は同梱の解説を参照して下さい。

 なお、より旧いexl.exeについては rubyなしでExcel操縦rubyスクリプトを実行するためのexl.exeを参照して下さい。


《目次》


1. exl18.exeを作った目的

 Excelを自動操縦するため、exlap.rbというruby用ライブラリを作りましたが、当然ながらrubyがインストールされてないと使えません。

 しかし、rubyのない環境で実行できると便利なケースがあります。そこで、exl18.exeを作りました。rubyがインストールされていない環境でも、exlap関連のサンプルを実行できます。

 また、MS-Wordを自動操縦するためのwrdap関連のスクリプトも実行できます。

 それから、exl18.exeは、ruby 1.8.7に依拠していますが、これとは別にexl21.exeというのもあります。こちらは ruby 2.1.5 に依拠しています。exl21.exeは、exl21.zipという別の圧縮ファイルに含まれています。

 exl21の方はファイルサイズが大きいですが、より多くのrubyライブラリを組み込んであります。必要に応じて使い分けて下さい。使い方は同じです。

 ちなみに、ruby 1.8.7 のサポートは既に終了しています。

△ 目次に戻る


2. パッケージ exl18.zip の中身

 パッケージ exl18.zip には、exl18.exe およびそのソースファイルなど関連ファイル一式が含まれています。

 必要なのは exl18.exe だけです。他は必要に応じて参照して下さい。

 exl18.exeは、exerb(rubyスクリプトを実行可能なexeファイルに変換するソフト)で作成したものです。exerb ver 5.4.0 で変換しました。

 exl18.exeのファイルサイズは 1,830,912バイト(約1.7メガバイト)です。ちなみに、exl21.exeの方は約4.9メガバイトです。

△ 目次に戻る


3. exl18.exeのインストール

 exl18.exeを適当なディレクトリ(つまりフォルダ)にコピーします。それでインストールは終了です。

 できれば、パスの通ったディレクトリにコピーしていただくと、後々便利ですが、そうしなければならないわけではありません。USBメモリーなどの外付媒体に置いておくのでもかまいません。

 ちなみに、私は C:\usr\bin というディレクトリの下に exl18.exe を置いています。

    

 《Windowsのマイコンピュータ(VISTA以降では「コンピュータ」)を動かし、スクリプトに焦点を当ててメニュー呼び出しを行う。》そんな方式でスクリプトを実行したい人は、とりあえずexl18.exeを実行して下さい。マイコンピュータでexl18.exeに焦点を当てて、それをクリックすれば exl18.exeを実行することになります。

 こうすると、「送る」メニューに ExlRun18.bat というのが追加されます。この使い方については次項で述べます。

 もう一度 exl18.exe を実行すると、「送る」メニューから ExlRun18.bat が削除されます。必要なくなった時に行って下さい。

 あるいは、exl18.exeをUSBメモリーなどの外付媒体に置いている場合、その媒体をパソコンから取り外す時は、exl18.exeを実行して、「送る」メニューからExlRun18.batを削除して下さい。

△ 目次に戻る


4. exl18.exeをマイコンピュータ上で用いる方法

 マイコンピュータで test.rb(rubyスクリプト)に焦点を当てている状態で、「送る」メニューを呼び出すと、その中に「ExlRun18.bat」があると思います。それをクリックします。

 すると、test.rb が ExlRun18.bat に送られます。これで test.rb が実行されることになります。

 もし そのスクリプトが test.xls を生成するものであれば、test.xls が書き出されます。

 スクリプトが標準出力もしくは標準エラー出力を出力した場合は、スクリプトがあるのと同じディレクトリに !stdout.txt もしくは !stderr.txt というテキストファイルが書き出されます。

 スクリプトに誤りがあってエラーが発生した時は、!stderr.txt にそのエラーの内容が書き出されます。

△ 目次に戻る


5. exl18.exeをDOSプロンプトで用いる方法

 WindowsのDOSプロンプトは、DOS窓とかコマンドプロンプトなどと言われることもあるようです。

 「ファイル名を指定して実行」を選んでから、cmdの3文字を入力し、エンターキーをたたくと、DOSプロンプトの状態になります。

 この状態で、例えば

  C:\usr\bin\exl18.exe test.rb [enter]

のように入力すると、test.rbが実行されます。

 exl18.exeがパスの通ったディレクトリに置かれていれば、

  exl18.exe test.rb [enter]

のように、パス名を省略できます。先述の実行例にある C:\usr\bin\ を省略できます。

 DOSプロンプトから抜け出すには

  exit [enter]

と入力します。

△ 目次に戻る


6. exl18.exeの-xオプションと-sampleオプション

 exl18.exeに -x オプションを設けました。rubyの-xオプションと同じ意味合いのものです。

 バッチファイルなどに書き込まれたスクリプトを取り出して実行します。スクリプトファイルを 読み込む時に、「#!」で始まり「ruby」という文字列を含む行までを 読み飛ばします。rubyは小文字です。

 test.batなどのバッチファイルの中にrubyスクリプトを書き込んでおくと、test.batを実行することによって、バッチの中に書き込んであるそのrubyスクリプトを走らせることができます。

 例えば、次のようなtest.batです。

    

−−−− ここから
@echo off
C:\usr\bin\exl18.exe -x "%~f0" %*
GOTO :EOF
#! ruby
Exlap.new("test.xls") do |wb|
  ss = wb.fes
  ss.Range("A1").Value = "test"
  wb.save
end
−−−− ここまで

    

 「C:\usr\bin\exl18.exe」は、実際のexl18.exeの所在に合わせて書き換えます。もしexl18.exeがバッチコマンドと同じディレクトリにあるのなら、「”%~dp0exl18.exe”」と書けば大丈夫です。

 標準出力と標準エラー出力をファイルに書き出したい時は、次のようにします。

    

−−−− ここから
@echo off
C:\usr\bin\exl18.exe -x "%~f0" %* >!stdout.txt 2>!stderr.txt
FOR %%I IN (!std*.txt) DO IF %%~zI EQU 0 DEL %%I
GOTO :EOF
#! ruby
    (中略)
exit
−−−− ここまで

    

 上のようなバッチファイルの記述方法を覚えておくのは大変なので、-sampleオプションを指定してexl18.exeを実行すると、sample.batを出力します。例えば次のように実行します。

  exl18.exe -sample F:\work [enter]

 上のように実行すると、F:\work\sample.bat が書き出されます。

 -sampleの代わりに-sでも大丈夫です。

 なお、rubyスクリプトの先頭が「# make bat」という10文字からなる1行であれば、exl18.exeは、そのスクリプトを実行するのではなくバッチファイルを書き出します。

 「# make bat>」の11文字が書いてあれば、やはりバッチファイルを書き出しますが、バッチファイル実行中の標準出力が !stdout.txt に、標準エラー出力が !stderr.txt に書き出されるようになります。

 そのバッチファイルは、現在のパソコン環境だとどのディレクトリに持っていっても実行できます。

 別のパソコンで使う場合、exl18.exeと同じディレクトリにあれば実行できます。

 exl18.exeにパスが通っていれば、そのバッチファイルがどのディレクトリに置いてあっても実行可能です。

△ 目次に戻る


7. exl18.exeに関する仕様等

△ 目次に戻る


8. その他の補足事項

[補足1] wrdap.rbとpandocについて

 wrdap.rbは、MS-Wordを自動操縦するためのライブラリです。 私のサイトhttp://cup.sakura.ne.jp/wrdap.htmから関連のパッケージをダウンロードできます。

 wrdap.rbにはpandoc.exeを利用するメソッドがいくつか組み込まれています。pandocは、markdownという記述ルールで書かれた原稿をワード文書(*.docx)に変換できるコマンドです。

 exl18.exeでpandoc関連のメソッドを用いる時は、exl18.exeがあるのと同じディレクトリにpandoc.exeを置いて下さい。あるいは、pandoc.exeにパスが通っているのであれば、同じディレクトリに置かなくても大丈夫です。

 pandocのダウンロードサイトは次のところです。

Pandoc - Installing

 pandocに関する日本語解説は、下のサイトが参考になります。

Pandoc ユーザーズガイド 日本語版

    

[補足2] yado, yados について

 yado.rb は、ADOという仕組みを利用して、Accessファイル(*.mdb, *.accdb)、Excelファイル(*.xls, *.xlsx)を扱うためのrubyライブラリです。

 yados.rbの方は、 sqlite odbc driver がインストールされている場合に、sqlite3データベースを扱えるようにするためのものです。

 yadoについては 私のサイトhttp://cup.sakura.ne.jp/yado.htm に ver 1.5 を掲載してますが、若干改善したものをexl18.exeに組み込みました。

 使用例を一つあげてみます。Accessデータベースのサンプル Northwind.mdb がカレントディレクトリにある状態で、次の3行のスクリプトをexl18.exeの下で実行すると、Northwind.mdbの標準テーブルの内容をExcelファイルとして書き出すことができます。ただし、画像などのバイナリーデータは除かれます。

    

−−−− ここから
db = Yado.new("Northwind.mdb")
db.pav("Northwind.xls")
db.close
−−−− ここまで

 もし Northwind.mdb の仮想テーブルの内容も一緒に書き出すのであれば、2行目を次のように書き換えます。

  db.pav("Northwind.xls", %w(TABLE VIEW))

    

[補足3] rrxwin.rbについて

 rrxwin.rbは、統計解析ソフトRをruby経由で利用するためのライブラリです。 私のサイトhttp://cup.sakura.ne.jp/rrx.htm から関連のパッケージをダウンロードできます。

 rrxwin.rbには、統計解析ソフトRに関連するメソッドの他に、Windowsのクリップボード、Webページの取得などに関連するメソッドも組み込まれています。それらは、Rとは関係なく利用できます。

 例えば、「Rrx::str2clp(“test”)」と書けば、クリップボードに test という文字を出力できます。一方、「str = Rrx::clp2str()」とすれば、クリップボードにある文字情報を変数strに代入できます。

 Web上のデータを取得するための Rrx::get_web(), Excelのワークシートをrubyの配列に変換するための Rrx::xls2ary() などもあります。

 それらメソッドについては、 rrxwin.rb で定義されている各種メソッド を参照して下さい。

 ちなみに、rrx.rb というファイルも組み込まれていますが、これは、単に rrxwin.rb をrequireするだけのものです。

    

[補足4] exl18.exeに含まれているファイルの取り出し

 exl18.exeには exl18.rb, exlap.rb などが組み込まれているわけですが、簡単なrubyスクリプトを実行することで、それらを書き出すことができます。

 例えば、exl18.rbを書き出すスクリプト get_src.rb は次のとおり。4行のスクリプトです。

−−−− get_src.rb ここから
filename = "exl18.rb"
src_fp = ExerbRuntime.open(filename)
body = src_fp.read
File.open(filename, "wb") {|ff|  ff.write body}
−−−− get_src.rb ここまで

 この get_src.rb を exl18.exe の下で実行すれば、exl18.rbが書き出されます。

 このやり方は、exl21.exeに対しては用いることができません。

△ 目次に戻る


9. サンプルスクリプトについて

 私のサイトに掲載しているexlap用のサンプルスクリプトは、exl18.exeの下で実行可能です。

 wrdap用のサンプルスクリプトも同じく実行できます。

 それらサンプルスクリプトと関連のドキュメントをexl_sample.zipという別の圧縮ファイルにしてWebにアップロードしておきます。

 それらサンプルは、exl21.exeの下でも実行できます。

    

 ただし、私が確認したところでは、ワードの箇条書きに関する list05b.rb をexl18.exeの下で実行するとエラーになります。exl21.exeでは大丈夫です。

 これは、チェックマークを行頭文字とする箇条書きを行うものです。チェックマークをユニコード・ポイント記述形式 “\uF0FC” で表現しています。

 これが ruby 1.8.7 では利用できないため、exl18.exeでは正しく扱えません。”\uF0FC” を [0xf0fc].pack(“U*”) と書けば、ruby 1.8.7 でも同じ文字を表現できるはずですが、このように書き換えてもうまくいきません。

 exl21.exeでは、どちらの表現を用いてもエラーなく実行できます。

 このようにエラーになってしまうものがありますが、ほとんどのサンプルスクリプトは exl18.exe でも実行できます。

    

〜 以上 〜


トップページへ