[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

In This Thread

Prev Next