76

使用以下代码运行 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 范围。我进行了广泛的搜索并尝试了多种设置单元格值的方法(例如 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: 
4

16 回答 16

117

在这一行有同样的错误

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

使用基于非零的索引解决

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

创建这个库的人怎么可能认为使用基于非零的索引是个好主意?

于 2013-01-16T17:54:27.667 回答
20

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

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

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

于 2012-10-15T10:29:07.863 回答
8

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

于 2012-10-15T10:12:24.383 回答
4

转到 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

于 2012-10-03T18:36:10.513 回答
4

也遇到了这个错误......

当保存到文件路径包含无效字符时会发生这种情况,在我的情况下:

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

\注意两者的存在/

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

于 2014-07-08T15:31:41.313 回答
4

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

请制作这个文件夹。C:\Windows\SysWOW64\config\systemprofile\Desktop ·Windows 2008 Server x86
请制作此文件夹。C:\Windows\System32\config\systemprofile\Desktop

于 2015-04-27T09:47:46.723 回答
3

我知道这是旧的,但只是为了介绍我的经验。我今天早上刚碰到它。原来我们的错误与 .xls 行限制或数组索引无关。它是由错误的公式引起的。

我正在从数据库向 Excel 导出一张关于我的客户的表格。有人填写客户名称=90Erickson-King,显然这可以作为数据库中的字符串类型字段,但是会导致 Excel 中的公式错误。#N/A该程序并没有像您在使用 Excel 时那样显示,而是在一段时间后冻结并溢出了 0x800A03EC 错误。

我通过删除客户名称中的等号和破折号来纠正此问题。之后出口顺利。

我猜这个错误代码有点太笼统了,因为人们看到报告了很多不同的可能原因。

于 2018-06-07T01:54:47.207 回答
2

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

Application xlApp = new Application();
xlApp.DefaultSaveFormat = XlFileFormat.xlOpenXMLWorkbook;
于 2014-07-04T07:08:17.820 回答
1

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

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

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

于 2014-01-31T08:30:21.160 回答
1

这一定是世界上最通用的错误消息,因为我今天使用 Excel 互操作通过以下命令得到它:

Excel.WorkbookConnection conn;
conn.ODBCConnection.Connection = "DSN=myserver;";

解决了什么问题是在连接字符串中指定 ODBC:

conn.ODBCConnection.Connection = "ODBC;DSN=myserver;";

万一其他人遇到此错误,我希望它有所帮助。

于 2019-05-01T19:25:57.317 回答
0

一段时间前我收到了同样的错误。问题是我的 XLS 文件包含超过 65531 条记录(准确地说是 50 万条)。我试图读取一系列单元格。

Excel.Range rng = (Excel.Range) myExcelWorkbookObj.UsedRange.Rows[i];

当我的计数器(即“i”)超过 65531 条记录的限制时,尝试读取单元格范围时引发异常。

于 2018-04-10T06:53:24.163 回答
0

添加另一个可能导致此问题的问题:公式错误,因为我根据我的语言环境使用了错误的列表分隔符。使用CultureInfo.CurrentCulture.TextInfo.ListSeparator;纠正了这个问题。

请注意,异常是在以下代码行中引发的...

于 2018-11-01T20:37:17.833 回答
0

调用此代码时出现此错误:wks.Range[startCell, endCell]RangestartCellendCellRange 指向不同的工作表,然后是变量wks

于 2020-02-27T16:09:32.097 回答
0

此错误的另一个原因。下面的代码示例在数据表 (dtTable) 具有空白表名时返回错误:

  ' Open Excel workbook
  objExcelApp = New Application
  objExcelWorkbook = objExcelApp.Workbooks.Add()
  objExcelSheet = objExcelWorkbook.ActiveSheet
  objExcelSheet.Name = dtTable.TableName
于 2020-10-20T13:20:23.063 回答
0

在 2020 年仍然看到这个错误。正如上面stt106所述,有很多很多可能的原因。在我的情况下,它是在将数据自动插入工作表期间,并且日期被错误地输入为 1019 年而不是 2019 年。由于我使用数据数组插入,因此很难找到问题,直到我切换到逐行插入。

这是我的旧代码,它“隐藏”了问题数据。

    Dim DataArray(MyDT.Rows.Count + 1, MyDT.Columns.Count + 1) As Object
    Try
        XL.Range(XL.Cells(2, 1), XL.Cells(MyDT.Rows.Count, MyDT.Columns.Count)).Value = DataArray
    Catch ex As Exception
        MsgBox("Fatal Error in F100 at 1270: " & ex.Message)
        End
    End Try

一次按单行插入相同的数据时,它会因相同的错误而停止,但现在很容易找到有问题的数据。

多年后我添加了这些信息,以防这对其他人有帮助。

于 2020-11-12T20:54:09.180 回答
-1

我遇到了同样的错误,但现在已经排序。在我的例子中,我有标题为“Key1”、“Key2”和“Key3”的列。我已将列名更改为其他名称并对其进行了排序。

这些似乎是保留关键字。

问候, 马赫什

于 2020-12-10T16:25:18.340 回答