我有一个旧的 ruby 程序,它从 excel 文件中提取值并将摘要存储在另一个 excel 文件中。为此,该程序使用来自 Ruby 的库 win32ole。切换到装有 Windows 7 64 位(而不是 Windows XP 32 位)、Office 2007 而不是 Office 2003 的新计算机后,程序现在在存储生成的 excel 文件时会引发错误:
ana.rb:120:in `method_missing': SaveAs (WIN32OLERuntimeError)
OLE error code:800A03EC in Microsoft Office Excel
'c:/my/dir' could not be accessed. The file could be corrupt, is on a server that does not react, or the file is write protected.
(German: Auf 'c:/my/dir' konnte nicht zugegriffen werden. Unter Umstaenden ist die Datei beschaedigt, befindet sich auf einem Server, der nicht mehr reagiert, oder die Datei ist schreibgeschuzetzt.)
HRESULT error code:0x80020009
Ausnahmefehler aufgetreten.
from ana.rb:120:in `save'
from ana.rb:54:in `generateReport'
from ana.rb:13:in `ana'
from ana.rb:191
该计划的相关部分是:
def generateReport
...
report.save(basicdir + reportfile)
...
end
与报告:
class EasyExcel
def initialize(path)
@path = path
@excel = excel = WIN32OLE.new("excel.application")
@workbook = @excel.Application.Workbooks.Open(@path)
@cache = Array.new
end
def save(filename)
saveCache
@workbook.SaveAs(filename)
end
第 120 行是@workbook.SaveAs(filename)
. filename
此时的值为c:/projekte/itcampus/feedback-analyse/feedback_report.xls
。经过一些调试,我注意到由于我的ruby异常处理不好,在ruby解释器停止后,有2个excel实例挂起。因此,问题似乎确实是由于 Windows 7 上 Excel 中处理路径的变化。
有谁知道以下问题的答案:
- 失败的原因可能是什么:64 位而不是 32 位,使用 Office 2007 而不是 2003,或者两者兼而有之?
- 是否有解决方法或修复方法来使用 Ruby 中的 Windows 7 64 位和 Word 或 Excel 等应用程序的桥接?
- 如何从 Ruby 的 Windows 应用程序中找到可用的 API?
我尝试过的 Ruby 解释器是:
- ruby 1.8.7 (2011-02-18 补丁级别 334) [i386-mingw32]
- 红宝石 1.9.2p180 (2011-02-18) [i386-mingw32]