[ruby-list:50257] WIN32OLEでExcel 2016
From:
菊地謙 <kikuchi@...>
Date:
2015-11-24 08:11:35 UTC
List:
ruby-list #50257
菊地と申します。
Windows 8.1 Pro 64bit上でRuby Installer版のrubyを使用しています。
ruby 2.2.3p173 (2015-08-18 revision 51636) [x64-mingw32]
また,このPCにはMicrosoft Office Premiumがインストールしてあり,Office 2013から
アップグレードしたOffice 2016がインストールされています。
この状況で,rubyのWIN32OLEでExcel 2016を使用するプログラムを動かしたところ,
Excelのプロセスが終了できないという問題が発生しています。
テストプログラムは下記のものです。
※カレントディレクトリのhoge.xlsxを問答無用で上書きします。
----<ここから>----
require "win32ole"
def get_absolute_path(filename)
fso = WIN32OLE.new("Scripting.FileSystemObject")
return fso.GetAbsolutePathName(filename)
end
app = WIN32OLE.new("Excel.Application")
books = app.WorkBooks
book = books.add
books.ole_free
books = nil
if File.exists? "hoge.xlsx"
File.delete "hoge.xlsx"
end
filename = get_absolute_path("hoge.xlsx")
book.SaveAs(filename)
book.Close(:SaveChanges => false)
book.ole_free
app.Quit
app.ole_free
----<ここまで>----
テストプログラムを実行後,タスクマネージャで確認すると,excel.exeが残ってしまって
います。くり返し実行すると,どんどんexcel.exeが増えていきます。
テストプログラムでは,各COMオブジェクトにole_freeを念のためつけていますが,通常
はここまでやらなくてもrubyのプロセス終了時にすべて解放されると思います。少なくとも
Excel 2010の環境ではプロセス終了とともにexcel.exeは終了します。おそらく,2013で
も同様だったと思います。
おそらく,ruby側の問題ではないと思うのですが,Excel 2016の環境が少ないためか,
あまり情報がありません。もしなにかおわかりの方がいらっしゃったら,教えていただけま
すでしょうか。もしくは,再現するかどうかでも結構です。
よろしくお願いいたします。
--
菊地 謙 (Ken Kikuchi)
(株)浜島書店 デジタル企画室
kikuchi@hamajima.co.jp
〒466-8691 名古屋市昭和区阿由知通2-1-1
TEL 052-735-8935 / FAX 052-733-8049