通过 win32ole 在 ruby​​ 中打开 powerpoint 演示文稿

Posted

技术标签:

【中文标题】通过 win32ole 在 ruby​​ 中打开 powerpoint 演示文稿【英文标题】:opening powerpoint presentations in ruby via win32ole 【发布时间】:2012-02-09 15:13:14 【问题描述】:

我有这段适用于 Excel 的代码。

  require 'win32ole'
  excel = WIN32OLE.new('Excel.Application')
  excel.visible = true
  workbook = excel.Workbooks.Open('c:\file.xls');

但是我在为 PowerPoint 完成同样的事情时遇到了麻烦;这段代码:

  require 'win32ole'
  ppt = WIN32OLE.new('Powerpoint.Application')
  ppt.visible = true
  presentation = ppt.Presentations.Open('c:\file.pptx');

产生这个错误:

filename.rb in `method_missing': (in OLE method `Open': ) (WIN32OLERuntimeError)
OLE error code:80004005 in <Unknown>
<No Description>
HRESULT error code:0x80020009
Exception occurred.

Microsoft Support site 表示唯一需要的参数是文件名。

【问题讨论】:

你能打开旧版本的PowerPoint吗?请注意,您在第一个示例中打开一个 .xls 文件,在第二个示例中打开一个 pptx(新格式)... 你确定 C:\file.pptx 存在吗?如果没有,我会收到该错误。 @Marc Talbot,我还将文件转换为 ppt 以防万一。文件的两个版本都可以手动打开,没有问题 @Anodyne,是的,谢谢,我刚才仔细检查了。 见:***.com/questions/1006923/… 【参考方案1】:

我发现了一个丑陋的解决方法:

  require 'win32ole'
  require 'fileutils'

  ppt = WIN32OLE.new('PowerPoint.Application')
  ppt.visible = true
  system "start c:/presentation.ppt"
  puts ppt.ActivePresentation.Slides.Count()
  ppt.ActivePresentation.Slides(2).Export("filename.jpg", ".jpg", 1024,768)
  ppt.ActivePresentation.Close();

【讨论】:

【参考方案2】:

我等了 3 秒,它解决了问题

【讨论】:

【参考方案3】:

我遇到了同样的错误,添加 ppt.visible = true 对我来说已经足够了。

【讨论】:

【参考方案4】:

尝试使用 Add 而不是 Open 或 Connect

例如:

presentation = ppt.Presentations.Add('c:\file.pptx');

【讨论】:

以上是关于通过 win32ole 在 ruby​​ 中打开 powerpoint 演示文稿的主要内容,如果未能解决你的问题,请参考以下文章

python操作word,关于win32com

通过来自64位exe的OLE分派启动32位exe

将 Visual Basic 语句移植到 Perl Win32::OLE 语句

如何在 Ruby 中将 ppt 转换为图像?

Perl Win32::OLE 生成访问数据库

cygwin中的Ruby Outlook自动化