VB を直接使用しているときにこの質問が出されたことは知っていますが、プロセスを終了するのに問題があります。win32ole と ruby 1.9 の jruby バージョンを使用しています。私の現在のコードは次のようなものです:
begin
excel = WIN32OLE::connect('excel.Application')
rescue
excel = WIN32OLE::new('excel.Application')
end
excel.Visible = 1
workbook = excel.Workbooks.Open("path to some doc")
ws = workbook.Worksheets(1)
ws.Select
cell_content = ws.Cells(4,4).Value
puts("#{cell_content}")
workbook.Close
cell_content = nil
ws = nil
workbook = nil
excel.ole_free
excel = nil
GC.start
私は単純にExcelを開いて、値を取得して終了しようとしています。しかし、タスク マネージャーを調べると、まだ EXCEL.exe が実行されていることがわかります。begin-rescue により、既存の exe も開く必要がありますが、実行するたびに新しいプロセスが開始されます。スクリプトが停止したら、手動で Excel を閉じますが、excel.Close も使用してみました。Marshal.releaseComObject に相当する Ruby を呼び出す必要がありますか? 私は VB の経験があまりなく、Ruby にかなり慣れていないので、これがばかげた質問である場合は申し訳ありませんが、事前に感謝します!
編集: 私はまた、excel.quit と excel.Quit を使用してみました。申し訳ありませんが、それについて言及するのを忘れていました。どちらも機能していないようです。
編集 2: rubymine で実行し、Windows XP を使用して、gem: jruby-win32ole を使用しています。
編集 3: コードは別のコンピューターでプロセスを適切に終了させるため、バージョンに問題がある可能性がありますか? jruby 1.5.6 で作業し、1.6.5.1 でプロセスがハングする