Excel错误HRESULT:0x800A03EC尝试获取具有单元格名称的范围

Tee*_*sej 19 c# excel vsto exception

我正在使用Window Service项目.必须在序列时间内将数据写入Excel文件中的工作表.

但有时,有时候,服务会在尝试获取带有单元名称的范围时抛出异常"HRESULT异常:0x800A03EC".

我已经打开excel表的代码,并在这里获取单元格.

  • 操作系统:窗口服务器2003 Office:
  • Microsoft Office 2003 sp2

1:打开excel表

m_WorkBook = m_WorkBooks.Open(this.FilePath, 0, false, 5,
     "", "", true, Excels.XlPlatform.xlWindows, ";",
     true, false, 0, true, 0, 0);
Run Code Online (Sandbox Code Playgroud)

2:让单元格写入

protected object m_MissingValue = System.Reflection.Missing.Value;
Range range = m_WorkSheet.get_Range(cell.CellName, m_MissingValue);
// error from this method, and cell name is string.
Run Code Online (Sandbox Code Playgroud)

Dom*_*icz 20

错误代码0x800A03EC(或-2146827284)表示NAME_NOT_FOUND; 换句话说,你已经要求了一些东西,Excel无法找到它.

这是一个通用代码,可以应用于许多无法找到的东西,例如使用当时无效的属性,例如PivotItem.SourceNameStandard当PivotItem没有应用过滤器时抛出此属性.Worksheets["BLAHBLAH"]当工作表不存在时抛出此信息等.通常,您要求具有特定名称的某些内容并且不存在.至于为什么,这将需要你的一些挖掘.

检查您的表单肯定有您要求的范围,或者.CellName肯定会回复您要求的范围名称.

  • 你能否提供一个参考来证实你的陈述"错误代码0x800A03EC(或-2146827284)是指NAME_NOT_FOUND"?我找不到一个...... (3认同)
  • @ForeverWintr你使用Err.exe工具,它是一个命令行工具,只需将它放在System32中并从dos提示符调用它:`err 0x800A03EC`,它使用OS头文件. (2认同)

ebr*_*rts 6

我遇到了这个错误,因为我试图将一个字符串写入以“=”开头的单元格。

解决方案是在等号之前放置一个“'”(撇号),这是一种告诉 excel 您实际上不是在尝试编写公式,而只是想打印等号的方法。


小智 5

我在这里找到了一个可能的解决方案:http://www.made4dotnet.com/Default.aspx ?tabid=141&aid=15

编辑:

如果使用 Microsoft Visual Basic .NET、Microsoft Visual C# .NET 或 Microsoft Visual C++ 自动化 Microsoft Excel,则在调用某些方法时可能会收到以下错误,因为计算机的区域设置设置为美国英语以外的其他内容(区域设置 ID 或LCID 1033):

HRESULT 异常:0x800A03EC

和/或

旧格式或无效类型库

解决方案1:


要解决此错误,您可以在执行与 Excel 相关的代码时将 CurrentCulture 设置为 en-US,并使用这两个函数重置回原始值。

//declare a variable to hold the CurrentCulture
System.Globalization.CultureInfo oldCI;
//get the old CurrenCulture and set the new, en-US
void SetNewCurrentCulture()
{
  oldCI = System.Threading.Thread.CurrentThread.CurrentCulture;
  System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
}
//reset Current Culture back to the originale
void ResetCurrentCulture()
{
  System.Threading.Thread.CurrentThread.CurrentCulture = oldCI;
}
Run Code Online (Sandbox Code Playgroud)

解决方案2:


另一个可行的解决方案是在 Microsoft Office\Office11(或相应的 Office 版本)下创建一个 1033 目录,将 excel.exe 复制到 1033 目录,并将其重命名为 xllex.dll。

尽管您可以使用其中一种解决方案来解决问题,但当您在美国英语以外的区域设置中调用 Excel 对象模型时,Excel 对象模型的行为可能会有所不同,并且您的代码可能会以您可能没有想到的方式失败。例如,您可能有将范围值设置为日期的代码:

yourRange.Value2 = "10/10/09"

根据区域设置,此代码的行为可能会有所不同,从而导致 Excel 将以下任意值放入该范围:

2009年10月10日 2009年9月10日 2010年10月9日


Elm*_*mue 5

完全未记录的错误 800A03EC(微软的耻辱!)的含义类似于“不支持操作”。

它可能会发生

  • 当您打开包含由较新的 Excel 版本创建的内容的文档时,您当前的 Excel 版本无法识别该内容。
  • 当您将文档保存到加载文档的同一路径时(文件已打开并锁定)

但大多数情况下,您会因为 Excel 中的严重错误而看到此错误。

  • 例如 Microsoft.Office.Interop.Excel.Picture 具有属性“Enabled”。当你调用它时,你应该收到一个布尔值。但您却收到错误 800A03EC。这是一个错误。
  • Exel 2013 和 2016 中存在一个非常严重的错误:当您自动化 Excel 流程并进行设置时,Application.Visible=trueApplication.WindowState = XlWindowState.xlMinimized会从不同的函数(例如 Range.Merge()、CheckBox.Text、Shape.TopLeftCell、Shape)中收到数百个 800A03EC 错误.锁定等等)。Excel 2007 和 2010 中不存在此错误。