2012-10-03 264 views
46

我收到“HRESULT:0x800A03EC”:异常: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范围是运行Excel加载与下面的代码时的错误没有违反。 我搜索了很多,并尝试了很多设置单元格值的方法(例如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: 
+2

您是否得到或找到了此问题的答案? – scifirocket

+0

这个错误非常“通用”,可能是由很多原因造成的。它发生的原因是将C#中的客户数据类型保存为excel。尝试保存日期包装对象时发生此错误;我想excel api要求数据是c#原始类型,否则会导致问题。 – stt106

回答

86

得到了同样的错误,在此行

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

非零解决基于索引

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

怎么可能是谁创造了这个库中的人还以为是用一个好主意基于非零的索引?

+29

IMO,这可能与Excel的单元格命名方案实际上不是基于零的(“R1C1”)... –

+17

基本指数有关。Excel早在(1980年代)就包括BASIC作为宏/脚本语言,后来导致Visual Basic for Applications。这是在类似C语言的广泛使用之前,他们在数学上正确的基于零的索引,这在20世纪90年代得到了普遍使用,这要归功于包括Java,Perl和Javascript在内的Web技术。 –

3

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

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

编辑----

寻找更多您的问题,看来问题可能是特定于语言环境。代码是否在另一台机器上工作?细胞有什么价值?它是日期时间格式吗?看看这里:

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

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

+1

谢谢你的建议,但这不是原因。 我在Excel2010中工作,即使保存为“xlsx”后也发生异常。 最奇怪的部分是它不会一直发生,但仅限于某些数据组合。尽管如此,我找不到引起它的模式。 –

+1

请问您可以在链接354上发布您的ThisAddin代码吗?你是否试图修剪单元格中的值?另外,你确定Cells [x,y]不是从0开始的吗?单元格值从1开始,并且不是基于excel的零。 – tranceporter

+0

当文件名太长时(虽然不确定是什么限制),我得到这个结果 – steveo40

8

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

13

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

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

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

+0

看起来好像你对此可能是正确的。不幸的是,我仍然在一百万以上的记录中发现这个问题。 –

+0

如果用户正忙于编辑公式,则该错误可能无限期地持续存在。 – Govert

2

得到了同样的错误,当试图导出大型Excel文件(〜150.000行) 固定用下面的代码

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

得到这个误差也....

它时,保存到文件路径包含无效字符,在我的情况发生:

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

注意两个\/

*的存在,也可能会出现,如果想保存到其没有按”目录t已经存在。

2

我们有同样的问题,为我们找到了解决方案:

请你把这个文件夹。 C:\ Windows \ SysWOW64 \ config \ systemprofile \ Desktop ·Windows 2008 Server x86
请使该文件夹。 C:\ Windows \ System32 \ config \ systemprofile \ Desktop

相关问题