2012-02-09 79 views
1

我有這段代碼適用於Excel。通過win32ole在ruby中打開幻燈片演示文稿

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說,唯一需要的參數是文件名。

+0

您可以打開較舊版本的powerpoint嗎?請注意,您在第一個示例中打開了一個.xls文件,在第二個示例中打開了一個pptx(新格式)... – 2012-02-09 15:21:14

+0

您確定C:\ file.pptx存在嗎?如果沒有,我會得到這個錯誤。 – Anodyne 2012-02-09 15:23:39

+0

@Marc Talbot,我也將文件轉換爲ppt以防萬一。這兩個版本的文件打開沒有問題手動方式 – 2012-02-09 15:36:19

回答

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(); 
-1

嘗試使用添加而不是打開或連接

例如:

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

1

我把3秒的等待和它修復了問題

+0

我有同樣的問題,實際上,這工作! – Hiro 2013-07-01 06:58:42

0

我得到了同樣的錯誤和添加ppt.visible = true對我來說已經足夠了。

相關問題