excel - excel服务器执行失败( HRESULT例外: 0 x80080005 ( CO_E_SERVER_EXEC_FAILURE ) )

我尝试使用以下方法在服务器端将.xls文件转换为.xlsx文件Microsoft.Office.Interop.Excel.Workbook类如下所示:


 workBook.SaveAs("FILENAME_HERE", XlFileFormat.xlOpenXMLWorkbook, Type.Missing, Type.Missing, Type.Missing, Type.Missing, XlSaveAsAccessMode.xlNoChange, Microsoft.Office.Interop.Excel.XlSaveConflictResolution.xlLocalSessionChanges, Type.Missing, Type.Missing, Type.Missing, Type.Missing);



我得到以下错误:


Retrieving the COM class factory for component with CLSID {00024500-0000-0000-C000-000000000046} failed due to the following error: 80080005 Server execution failed (Exception from HRESULT: 0x80080005 (CO_E_SERVER_EXEC_FAILURE)). : System.Runtime.InteropServices.COMException (0x80080005): Retrieving the COM class factory for component with CLSID {00024500-0000-0000-C000-000000000046} failed due to the following error: 80080005 Server execution failed (Exception from HRESULT: 0x80080005 (CO_E_SERVER_EXEC_FAILURE)).


 at System.Runtime.Remoting.RemotingServices.AllocateUninitializedObject(RuntimeType objectType)


 at System.Runtime.Remoting.Activation.ActivationServices.CreateInstance(RuntimeType serverType)


 at System.Runtime.Remoting.Activation.ActivationServices.IsCurrentContextOK(RuntimeType serverType, Object[] props, Boolean bNewObj)


 at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck)


 at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)


 at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)


 at System.Activator.CreateInstance(Type type, Boolean nonPublic)


 at System.Activator.CreateInstance(Type type)


 at CALLING_METHOD_IN_MY_LIBRARY_HERE...



问题是这个错误只发生在临时服务器上;在本地机器上工作正常。

谁知道如何解决这个问题?

时间:

使用DCOMCNFG.exe,打开它,并转到:组件服务->计算机->电脑->DCOM配置->Microsoft Excel应用程序。

打开属性,选择标识选项卡,并选择交互式用户。

我发现这篇文章深入讨论这个问题,如果有帮助,错误"80080005服务器执行失败(HRESULT异常)0x80080005 (服务器执行失败))可能由于以下原因而发生:

  • 这台机器的CPU负载很高,进程需要很长时间才能启动,并且不能在120秒内执行CoRegisterClassObjects()
  • com服务器没有为正确的类ID注册
  • com服务器当前正在停止,在CoCreateInstance和com服务器停止部分之间存在争用条件
  • com服务器的启动方式存在安全问题(此页建议拼写错误的密码或缺少"运行方式…"com服务器的"以批处理方式登录"权限,但无论如何,我建议针对你的特定配置重新验证此信息)

https://blogs.msdn.microsoft.com/adioltean/2005/06/24/when-cocreateinstance-returns-0x80080005-co_e_server_exec_failure/

通过允许该服务进行桌面交互,为我解决了同样的问题。(在tomcat6w配置工具中的“登录"选项卡)

我使用这个解决方案修复了这个问题:右击组件Services/Computers/DCOM Config/Microsoft Word97文档属性常规选项卡

设置身份验证Level:None

尝试在workBook.open和workBook.SaveAs两个方法之后添加2秒钟的Thread.Sleep方法,例如Thread.Sleep(2000)。如果您的Excel文件格式很多,请尝试再延长几秒钟。

...