来自HRESULT的exception:0x800A03EC错误

使用以下代码运行Excel加载项时出现“HRESULT:0x800A03EC”错误:

Excel.Range rng = ActiveSheet.Cells[x, y] as Excel.Range; string before = rng.Value2; string cleanV = System.Text.RegularExpressions.Regex.Replace(before, @"\s+", ""); rng.set_Value(cleanV); 

当错误发生时,X和Y被设置为1,因此Excel范围不被违反。 我广泛search并尝试了许多设置单元格值的方法(例如Cells [x,y],range.set_Value()),但是为什么会出现此错误以及如何避免此错误。

任何帮助是极大的赞赏。

以下是例外情况:


 System.Runtime.InteropServices.COMException was unhandled by user code HResult=-2146827284 Message=Exception from HRESULT: 0x800A03EC Source="" ErrorCode=-2146827284 StackTrace: at System.RuntimeType.ForwardCallToInvokeMember(String memberName, BindingFlags flags, Object target, Int32[] aWrapperTypes, MessageData& msgData) at Microsoft.Office.Interop.Excel.Range.set_Value(Object RangeValueDataType, Object value) at ImportValidation.ThisAddIn.removeAnySpaces(Int32 x, Int32 y) in c:\Users\dshevelev\Documents\Visual Studio 2012\Projects\ImportValidation\ImportValidation\ThisAddIn.cs:line 354 at ImportValidation.ThisAddIn.ReadHeaders(Hashtable columnAddress) in c:\Users\dshevelev\Documents\Visual Studio 2012\Projects\ImportValidation\ImportValidation\ThisAddIn.cs:line 123 at ImportValidation.ThisAddIn.mapColumns() in c:\Users\dshevelev\Documents\Visual Studio 2012\Projects\ImportValidation\ImportValidation\ThisAddIn.cs:line 493 at ImportValidation.Ribbon1.button6_Click(Object sender, RibbonControlEventArgs e) in c:\Users\dshevelev\Documents\Visual Studio 2012\Projects\ImportValidation\ImportValidation\Ribbon1.cs:line 55 at Microsoft.Office.Tools.Ribbon.RibbonPropertyStorage.ControlActionRaise(IRibbonControl control) at Microsoft.Office.Tools.Ribbon.RibbonPropertyStorage.ButtonClickCallback(RibbonComponentImpl component, Object[] args) at Microsoft.Office.Tools.Ribbon.RibbonManagerImpl.Invoke(RibbonComponentCallback callback, Object[] args) at Microsoft.Office.Tools.Ribbon.RibbonMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) at Microsoft.Office.Tools.Ribbon.RibbonManagerImpl.System.Reflection.IReflect.InvokeMember(String name, BindingFlags invokeAttr, Binder binder, Object target, Object[] args, ParameterModifier[] modifiers, CultureInfo culture, String[] namedParameters) InnerException: 

在这一行中得到同样的错误

  Object temp = range.Cells[i][0].Value; 

用非零的索引解决

  Object temp = range.Cells[i][1].Value; 

如何创build这个库的人认为使用非零索引是一个好主意?

这是一个常见的,但很差的Excel COM错误。 我已经看到它logging为“NAME_NOT_FOUND”,这意味着Excel的COM层被禁用,并且找不到COM属性或方法名称。

当Excel处于“繁忙”状态时,如果您设置了一个启动代码的计时器,并且在用户正在编辑单元格或按下鼠标按键时开始运行代码,那么在运行COM代码时,你总是会得到这个错误。 只有当代码在主Excel线程上运行时,才会发生此错误,但似乎与在Excel“繁忙”时从另一个线程调用Excel COM对象模型时得到的错误VBA_E_IGNORE = 0x800AC472等效。

唯一的解决方法似乎是重试(有一些小的延迟)的COM调用,直到成功 – 当Excel不再是“忙”。

检查你的开始索引。 它从1开始不为0,为Microsoft.Office.Interop.Excel范围对象。 由于我的循环起始值,我收到了同样的错误。

转到Excel选项>保存>以这种格式保存文件>select“Excel工作簿(*。xlsx)”。 如果您使用的是旧版本的Excel文件(.xls)而不是.xlsx,则会出现此问题。 旧版本不允许超过65k行在Excel表中。

一旦保存为.xslx,请尝试再次执行您的代码。

编辑—-

更多地考虑你的问题,似乎这个问题可能是特定于语言环境的。 代码是否在另一台机器上工作? 细胞有什么价值? 它是date时间格式? 看看这里:

http://support.microsoft.com/kb/320369

http://blogs.msdn.com/b/eric_carter/archive/2005/06/15/429515.aspx

还有这个错误….

当保存到文件path包含无效字符时发生,在我的情况下:

 path = "C:/somefolder/anotherfolder\file.xls"; 

注意\/

*如果试图保存到尚不存在的目录,也可能发生。

我们遇到同样的问题,find了解决办法:

请使这个文件夹。 C:\ Windows \ SysWOW64 \ config \ systemprofile \ Desktop·Windows 2008 Server x86
请使这个文件夹。 C:\ WINDOWS \ system32 \设置\ systemprofile \桌面

我在使用Excel 2003 DLL并尝试写入第257列时遇到同样的错误。 Excel 2003将每个工作表的最大列限制为256,从而引发此exception。

有关Excel 2003的详细限制,请参阅http://office.microsoft.com/zh-cn/excel-help/excel-specifications-and-limits-HP005199291.aspx

从Excel 2007开始,列限制增加到16384列,请参阅http://office.microsoft.com/zh-cn/excel-help/excel-specifications-and-limits-HP010073849.aspx

尝试导出大型Excel文件时(〜150.000行)得到相同的错误使用以下代码修复

 Application xlApp = new Application(); xlApp.DefaultSaveFormat = XlFileFormat.xlOpenXMLWorkbook;