我正在尝试使用Microsoft.Office.Interop.Excel.Workbook
类将.xls文件转换为服务器端的.xlsx文件,如下所示:
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...
问题是此错误仅在登台服务器上发生;在我的本地机器上它工作正常。
我在登台服务器上尝试过的事情:
2)展开组件服务“ - >”计算机“ - >”我的电脑“ - >”DCOM配置“
3)找到“Microsoft Excel应用程序”。
4)打开“属性”对话框的权限
5)点击“安全”标签,
6)“启动和激活权限,配置权限,添加了权限 - 在管理员用户(此用户),交互式用户和启动用户下运行身份
7)。启动和激活权限+访问权限+配置权限=>添加完全控制的IIS_IUSRS +网络服务**
2.更改了在我的本地计算机上将.xls文件从“Any CPU”转换为“x86”的项目的构建,并在服务器上发布了此库。
有人想出如何解决这个问题吗?我正在努力解决这个问题2天了。
使用DCOMCNFG.exe。打开它并转到:组件服务 - >计算机 - >我的电脑 - > DCOM配置 - > Microsoft Excel应用程序。
打开属性,选择“标识”选项卡,然后选择交互式用户。
我发现这篇文章深入讨论了这个问题如果这有帮助,可能会出现以下原因错误“80080005服务器执行失败(HRESULT异常:0x80080005(CO_E_SERVER_EXEC_FAILURE))”
我使用此解决方案修复了此问题:右键单击组件服务/计算机/ DCOM配置/ Microsoft Word97 - 2003文档属性/常规选项卡
设置身份验证级别:无
通过“允许桌面交互”为服务解决了同样的问题。 (在“登录”选项卡上的tomcat6w配置工具中)
我在别处找到了解决方案。
执行以下操作确实解决了我的问题:
使用DCOMCNFG.exe。打开它并转到:组件服务 - >计算机 - >我的电脑 - > DCOM配置 - > Microsoft Excel应用程序。打开属性,选择“标识”选项卡,然后选择交互式用户。
但是 - 问题每隔几分钟就会回来!
经过几个小时的尝试找出原因,我注意到我的服务器有数百个打开的WINWORD.EXE进程。这导致内存问题导致exception from hresult 0x80080005
错误。
嗯,愚蠢的,我忘了写代码来关闭互操作应用程序。一旦我解决了这个问题,错误就消失了。
doc.Close(false);
Marshal.ReleaseComObject(doc);
word.Quit();
Marshal.ReleaseComObject(word);
尝试在workBook.open和workBook.SaveAs两种方法之后添加Thread.Sleep方法,如Thread.Sleep(2000)2秒。如果您的Excel文件有很多格式,请尝试延长几秒钟。