首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用win32ole的Ruby程序在Windows7 64位下不再工作

使用win32ole的Ruby程序在Windows7 64位下不再工作
EN

Stack Overflow用户
提问于 2011-09-19 06:28:27
回答 3查看 4.8K关注 0票数 2

我有一个老的红宝石程序,它从excel文件中提取值,并将摘要存储在另一个excel文件中。为此,程序使用了来自Ruby的库win32ole。切换到具有Windows 7 64位(而不是Windows XP 32位)、Office 2007而不是Office 2003的新计算机后,程序现在在存储生成的excel文件时抛出错误:

代码语言:javascript
复制
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

该方案的有关部分如下:

代码语言:javascript
复制
def generateReport
  ...
  report.save(basicdir + reportfile)
  ...
end

在报告中:

代码语言:javascript
复制
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。经过一些调试,我注意到,由于我的红宝石异常处理不好,在红宝石解释器停止后,有两个excel挂起实例。因此,问题似乎确实是由于Windows 7上Excel中处理路径的变化造成的。

是否有人知道下列问题的答案:

  • 失败的原因可能是什么:64位而不是32位,使用Office 2007而不是2003年,或者两者兼而有之?
  • 是否有解决办法或修复方法来使用连接Windows764位的桥,以及从Ruby764位的Word或Excel之类的应用程序?
  • 如何从Ruby?

的Windows应用程序中找到哪个API可用?

我尝试过的Ruby解释器是:

i386-mingw32

  • ruby 1.9.2p180 (2011-02-18) i386-mingw32
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-09-20 06:54:52

感谢所有在我的问题上提出意见和评论的人。最后,我找到了一个解决办法。

代码语言:javascript
复制
class EasyExcel
  ....
  def save(filename)
    saveCache
    dos_file = filename.gsub(/\//, "\\\\")
    @workbook.SaveAs(filename)
  end

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

所以打开一个excel

代码语言:javascript
复制
@workbook = @excel.Application.Workbooks.Open(@path)

(使用@path,类似于

代码语言:javascript
复制
C:/projekte/itcampus/feedback-analyse/feedback/Bewertungsbogen_XX1404.xls

)起作用,但是

代码语言:javascript
复制
@workbook.SaveAs("c:/projekte/itcampus/feedback-analyse/feedback_report.xls")

不会的。很奇怪!

票数 3
EN

Stack Overflow用户

发布于 2016-08-19 09:42:15

我在Windows 2008 (64位)上也有类似的问题,使用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/找到了解决方案

Windows2008Server

x64:创建以下目录:

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

对于Windows2008Server 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

票数 1
EN

Stack Overflow用户

发布于 2011-09-20 06:02:14

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7467193

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档