Excelを終了させる方法
rubyからOLE経由でExcelを操作するのはこちらを参考に
http://magazine.rubyist.net/?0004-Win32OLE
問題はQuitしてもExcelのプロセスが残ってしまうこと。irbで実行すればわかるけど
require 'win32ole' xl = WIN32OLE.new('Excel.Application') book = xl.Workbooks.Open("c:/a.xls") book.Close(false) xl.Quit sleep(10)
で、タスクマネージャでプロセス一覧を見てみるとEXCEL.EXEが残っていることがわかる。
rubyが終了すればEXCEL.EXEが消えるので、おそらくGCされる際にCOMのIUnknown::releaseが呼ばれるのだろう。
ま、通常はこれでも問題無いのだがずっと稼働させるアプリの場合はちゃんとExcelが終了するようにしてあげましょう
require 'win32ole' excel = WIN32OLE.new('Excel.Application') books = excel.Workbooks workbook = books.Open('C:/a.xls') books.ole_free workbook.Close(:SaveChanges => false) workbook.ole_free excel.ole_free sleep(10)
でも、全部のCOMオブジェクトでole_freeしないといけないので、超面倒だなぁ