2013-07-24 129 views
5

尝试应付尝试打开PowerPoint文件时不断收到的HRESULT E_FAIL错误。有更多的代码,但是我得到错误的基本操作在下面的代码块中显示。正在使用的参考DLL是:Office 14.0.0和Microsoft.Office.Interop.Powerpoint 14.0.0。错误HRESULT E_FAIL已从使用C#打开PowerPoint文档时调用COM组件返回。

Application application = new Application { DisplayAlerts = PpAlertLevel.ppAlertsNone }; 
Presentation powerpoint = application.Presentations.Open(@"X:\XXX\xxx.pptx"); 
powerpoint.SaveAs(@"X:\XXX\saved.pdf", PpSaveAsFileType.ppSaveAsPDF,  MsoTriState.msoTrue); 

这是一个非常基本的操作,但不知道为什么它抱怨COM异常。 机器上安装了带有Service Pack 1的Microsoft Office 2010 32位。

+0

你有没有试过谷歌的“powerpoint 0x80004005”?最常见的错误似乎是有人试图从ASP.NET使用Office interop(这本身就是一个很大的错误),并且ASP.NET进程/用户错过了访问文件的权限。 – cremor

+0

是否尝试从“网络DTC访问”中选择“无需身份验证”...? –

+0

你有没有找到一个根本原因的答案呢?我有一个测试用例,即使所有VSTO/COM对象在两次调用之间被释放(refcount = 0),第二次调用.Open时也会发生此错误。 –

回答

1

在打开演示文稿之前,Powerpoint需要可见。右后创建新Application对象调用此:

application.Visible = MsoTriState.msoTrue; 

如果这仍然不能解决你必须张贴有关异常的更多详细信息除外。它的某些属性(或者内部例外)应该说明究竟是什么失败了。

+0

这就是它的重点。它从不提供任何明确的例外。我一直在使用至少这个基本的代码很长一段时间来做复杂的东西,例如删除元数据信息或将它们保存为不同的格式。无论是否使应用程序可见,该代码段都是打开演示文稿的基础。此错误没有描述,内部异常为空。不知道机器上安装的Office应用程序或我最近添加的Service Pack有问题吗? – phoenix

+0

确切的错误:System.Runtime.InteropServices.COMException(0x80004005):错误HRESULT E_FAIL h 已从调用COM组件返回。 at Microsoft.Office.Interop.PowerPoint.Presentations.Open(String FileName,Ms oTriState ReadOnly,MsoTriState Untitled,MsoTriState withWindow) – phoenix

+1

FWIW,Powerpoint不需要为了打开演示文稿而可见,只要打开演示文稿演示文稿无窗口。所有文件或只有一些文件是否出现问题?如果您手动尝试在PPT中打开相同的文件,会发生什么情况? –

0

我有同样的确切问题。我已经搜索了几天的解决方案。 最后我找到了。

当您安装MS Office 2010时,您应该在Office CD中一起安装“Office共享功能”和Powerpoint。 安装“Office共享功能”后,一切正常。

相关问题