2

我有一个旧的 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]
4

3 回答 3

3

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

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")

才不是。很奇怪!

于 2011-09-20T06:54:52.570 回答
1

我在 Windows Server 2008(64 位)上遇到了类似的问题,使用 with 的解决方案filename.gsub(/\//, "\\\\")expand_path没有帮助。

当我和我的用户一起调用它时,它工作了,后台进程中的同一个程序出现了 OLE 错误。

解决方案(我不是在开玩笑,它有效):创建一个文件夹C:\Windows\SysWOW64\config\systemprofile\Desktop

我在https://blogs.msdn.microsoft.com/dataaccesstechnologies/2012/12/19/error-microsoft-office-excel-cannot-access-the-file-while-accessing-microsoft-office-11找到了解决方案-0-object-library-from-ssis/

对于 Windows 2008 Server x64:创建以下目录:

C:\Windows\SysWOW64\config\systemprofile\Desktop

对于 Windows 2008 Server x86:创建以下目录:

C:\Windows\System32\config\systemprofile\Desktop

就是这样!!瞧!!你们都准备好了……

具有类似详细信息的替代链接: https ://social.msdn.microsoft.com/Forums/en-US/b81a3c4e-62db-488b-af06-44421818ef91/excel-2007-automation-on-top-of-a-windows- server-2008-x64?forum=innovateonoffice

于 2016-08-19T09:42:15.127 回答
0

您在使用 COM 和切换到 Windows 7 时可能遇到的许多问题都与用户权限有关。您是否尝试以管理员权限运行您的程序?

于 2011-09-20T06:02:14.957 回答