C# System.Runtime.InteropServices.COMException (0x800A03EC): HRESULT 异常:0x800A03EC Microsoft.Office.Interop.Excel._Workbook.SaveAs()

3
我在运行Windows Server 2008和2012时保存Excel电子表格出现了问题,但是在本地计算机(Windows 7、8或10)上运行这个项目却没问题。
C#源代码
Microsoft.Office.Interop.Excel.Application excelApp = new Microsoft.Office.Interop.Excel.Application();
Microsoft.Office.Interop.Excel.Workbook excelWorkBook = excelApp.Workbooks.Add();
Microsoft.Office.Interop.Excel.Worksheet excelWorkSheet = excelWorkBook.Worksheets.Add();
excelWorkSheet.Name = "blablabla";
//added cells data
excelWorkBook.SaveAs(excelPath.ToString());
excelWorkBook.Close();
excelApp.Quit();

错误信息

HRESULT 异常:0x800A03EC System.Runtime.InteropServices.COMException (0x800A03EC):异常 来自 HRESULT:0x800A03EC 在 Microsoft.Office.Interop.Excel._Workbook.SaveAs(Object Filename, Object FileFormat, Object Password, Object WriteResPassword, Object ReadOnlyRecommended, Object CreateBackup, XlSaveAsAccessMode AccessMode, Object ConflictResolution, Object AddToMru, Object TextCodepage, Object TextVisualLayout, Object Local)


这是一个应用程序,是桌面应用、服务还是网站? - Equalsk
糟糕!抱歉,这是一个Windows服务应用程序。 - mesutpiskin
2
这里有五分钱。请注意,微软不建议也不支持Windows Server Excel自动化。迟早你会撞上一堵墙,特别是在处理安全性和交互式用户会话需求时。看起来现在还为时过早,你可能还有一些余地考虑其他选项。 - Janis S.
@JanisS. 你认为我应该做什么? - mesutpiskin
1
@mesutpiskin,链接中有一个关于替代方案的部分。虽然这些替代方案不能提供很好的选择,如果您依赖Excel引擎,例如,如果您需要进行公式计算、绘制图表。在这种情况下,您可以考虑使用解决方案,在其中控制数据类型,并使用Excel作为使用OpenXML生成的输出之一,同时在数据流中完成计算。 - Janis S.
1
@jenis S. 感谢您的回答。 - mesutpiskin
5个回答

1

1
这个错误是由于本地PC和服务器的Office版本不同引起的。我使用了Office 2012参考(Microsoft Office Interop Excel 14),但服务器有不同的版本(Microsoft Office Interop Excel 12)。
步骤1)安装相同的Office版本(v.12)。
步骤2)在“Microsoft Excel应用程序属性”窗口中选择“交互式用户”选项。 https://msdn.microsoft.com/en-us/library/windows/desktop/ms686587(v=vs.85).aspx enter image description here

1

我曾经和Microsoft.Office.Interop.Excel.Workbook一起走过地狱,发现解决方法是不要在我的AWS Windows系统上使用C:\驱动器,而是使用D:\驱动器。这与C:驱动器的挂载方式有关,会导致Microsoft.Office.Interop.Excel.Workbook SaveAs2函数调用失败。我尝试了很多其他常见的在线修复方法,但只有这个方法有效。


1
这个问题不是由你的代码引起的。我的电脑上安装了Office 2016和2010,卸载2010并重新启动后,问题得以解决。请确保将应用程序引用更改为MS Office 14.0对象库(适用于Office 2010)。

0

Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(pathExcel, null, false);

需要打开只读 = false


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接