系统.Runtime.InteropServices.COMException (0x800A03EC)

37

Microsoft.Office.Interop.Excel.WorkbookClass.SaveAs() 方法在Windows Server 2003和XP上运行得很好,但在Windows Server 2008上不起作用。我将其复制为原封不动的,并给予了所有的Dll's和权限。

我也尝试了所有在网上提供的解决方案,如区域设置和DCOM权限。

出现以下错误:

System.Runtime.InteropServices.COMException (0x800A03EC): 从 HRESULT: 0x800A03EC 异常

位于

Microsoft.Office.Interop.Excel.WorkbookClass.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)

请帮忙解决!


以下代码... 什么代码?我认为您忘记发布您的代码了。 - Mattias S
当我使用 worksheet.Cells[rowIndex, excelColumn] = "Weird Charcters Here" 导出到单元格时,我也遇到了这个异常。我发现我尝试放置在单元格中的数据包含许多“特殊字符”,导致了这个问题。 - GER
11个回答

55

找到答案.......!!!!!!!

微软官方不支持在Windows Server 2008上使用Microsoft Office 2003 Interop。

但是,在大量的代码和搜索组合中,我们找到了一个适用于我们情况的解决方案。

解决方案是插入Windows 2003和2008维护其文件夹结构方式之间的差异,因为Office Interop取决于桌面文件夹进行文件打开/保存中介。 2003系统将桌面文件夹放置在systemprofile下,而在2008下不存在此文件夹。

因此,当我们在以下所示的相应层次结构下在2008创建此文件夹时,office Interop能够按要求保存文件。 必须在以下位置之下创建此桌面文件夹:

C: \ Windows \ System32 \ config \ systemprofile

C: \ Windows \ SysWOW64 \ config \ systemprofile

这对我起作用了......

还要检查是否安装了.NET 1.1,因为Interop需要它,而Windows Server 2008未预安装它。

或者您也可以使用SaveCopyas()方法,只需将一个参数作为文件名字符串即可。

谢谢大家..!


我刚刚使用了SaveCopyas()代替SaveAs(),并在web.config中添加了模拟用户的设置,现在它可以正常运行了! - Kapil Kshirsagar
1
当方法具有不同的参数(例如保存格式)时,如何使用SaveCopyAs()而不是SaveAs()? - Muflix
我已经创建了桌面文件夹,现在它又可以完美地工作了。非常感谢,我自己永远也找不到这个问题。 - benshabatnoam
请务必在创建的桌面文件夹上设置适当的写入/创建权限。 - Nickolas Hook
几乎完美地解决了问题:我的Excel文件中的图像丢失了。通过处理同一文件夹中INetCache的存在/权限来解决它。https://dev59.com/X1_Va4cB1Zd3GeqPRkAr#41161719 - xverges
请在路径中添加“desktop”以使其更加明确。 - sofsntp

20

我用这种方法解决了问题...

  1. 点击“开始”->“运行”,输入“dcomcnfg”
  2. 这将打开组件服务窗口,展开“控制台根” ->“计算机”->“DCOM配置”
  3. 在组件列表中找到“Microsoft Excel Application”。
  4. 右键单击该条目,选择“属性”
  5. 在属性对话框上选择“标识”选项卡。
  6. 选择“交互式用户”。

出自此处最后一段提到的文章


谢谢你,我的朋友。我尝试了所有的方法,但只有你的答案有效。 - benshabatnoam
我卡在第三步,其中Microsoft Excel应用程序不可用于:控制台根>计算机>我的电脑。是否有更新的位置? - kaibakker

7

2
我也遇到了相同的问题。Excel文件中存在垃圾数据。我手动打开Excel,并删除了不良数据,一切正常了。我还尝试了CorruptLoad,也解决了问题。 - nate_weldon

2
我尝试保存excel文件时遇到了同样的错误。在使用MS Office 2003时,代码运行良好,但升级到MS Office 2007后出现了这个问题。每次我尝试将Excel文件保存到服务器或远程文件共享时都会发生这种情况。
我的解决方案虽然简陋,但效果不错。我只是让程序将文件保存在本地,比如用户的C:\驱动器。然后使用“System.IO.File.Copy(File,Destination,Overwrite)”方法将文件移动到服务器。然后您可以删除C:\驱动器上的文件。
非常好用,而且简单。但是必须承认,这并不是最优雅的方法。
希望这有所帮助!在想到这个想法之前,我一直很难在网上找到任何解决方案。

1

当IIS正在运行时,这是一个权限问题。

我曾经遇到过这个问题,我通过以下方式解决了它:

我进入文件夹:

C:\Windows\System32\config\SystemProfile

C:\Windows\SysWOW64\config\SystemProfile

这些都是受保护的系统文件夹,通常会有锁。

右键单击->卡片安全性->单击编辑->添加用户“Authenticadet User”并分配权限。

这样一切就解决了,如果您仍然有问题,请尝试将所有权限授予“Everyone”。


1
对于那些仍然遇到这个问题的人,我刚刚花了两天时间追踪这个可恶的东西。当数据集中没有行时,我也遇到了同样的错误。看起来很明显,但错误信息非常模糊,因此花费了2天的时间。

如果我没记错的话,问题是我得到了零行数据。所以我添加了一个检查 numberOfRows > 0,问题就解决了。 - trailmax

0
我在写入工作簿单元格时遇到了异常。问题是单元格从1开始索引,而不是0:
不好的代码:
activeSheet.Cells[0, 0].Value = 1;

好的:

activeSheet.Cells[1, 1].Value = 1;

0
在我的情况下,问题是将标题样式设置为“Header 1”,但该样式在我使用的Word中不存在,这就是我出现错误的原因,因为它不是英语办公软件。

0

我遇到了这个问题,是由于一个Excel文件的路径过长,每当我尝试打开这个Excel文件时,就会出现错误信息(例如,我的Excel文件路径很长,像C:\Users\Blabla\Blabla\MyVeryLongFolderHierarchyPath\MyExcelFile.xlsx)

解决方法是将我的Excel文件直接放在较短的文件路径下(例如C:\MyExcelFile.xlsx)。我无法相信在2021年还会因为文件路径过长而出现如此愚蠢的问题。


0
我偶然发现的一个奇怪的解决方案是查看后台是否有任何Excel进程正在运行。确保代码在完成任务后清理自身并关闭所有Excel进程。

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