我知道直接使用 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 正在运行。由于开始救援,它还应该打开一个现有的 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 上挂起