gpt4 book ai didi

带有 win32ole 的 Ruby 程序在 Windows7 64 位下不再工作

转载 作者:数据小太阳 更新时间:2023-10-29 08:40:35 25 4
gpt4 key购买 nike

我有一个旧的 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,或者两者兼而有之?
  • 是否有解决方法或修复程序来桥接到 Windows 7 64 位和来自 Ruby 的 Word 或 Excel 等应用程序?
  • 如何从 Ruby 的 Windows 应用程序中找到可用的 API?

我试过的Ruby解释器有:

  • ruby 1.8.7(2011-02-18 补丁级别 334)[i386-mingw32]
  • ruby 1.9.2p180 (2011-02-18) [i386-mingw32]

最佳答案

感谢所有为我的问题添加想法和评论的人。最后,我找到了解决方法。

class EasyExcel
....
def save(filename)
saveCache
dos_file = filename.gsub(/\//, "\\\\")
@workbook.SaveAs(filename)
end

这会将 (ruby) 路径中的每个正斜杠替换为 2 个反斜杠,然后在末尾计算为 1 个反斜杠。

打开excel用

@workbook = @excel.Application.Workbooks.Open(@path)

(使用 @path 类似

C:/projekte/itcampus/feedback-analyse/feedback/Bewertungsbogen_XX1404.xls

) 有效,但是

@workbook.SaveAs("c:/projekte/itcampus/feedback-analyse/feedback_report.xls")

没有。很奇怪!

关于带有 win32ole 的 Ruby 程序在 Windows7 64 位下不再工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7467193/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com