2009-05-21 148 views
16

我正在使用Window Service项目。必须按顺序将数据写入Excel文件中。Excel错误HRESULT:0x800A03EC尝试获取单元格名称的范围

但有时候,有时候,当服务试图获取单元格名称的范围时,该服务抛出异常“异常来自HRESULT:0x800A03EC”。

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

  • OS:视窗服务器2003处:
  • 的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); 

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. 
+0

你说“有时候”的方式让我想到这个答案:http://stackoverflow.com/questions/20422387/adding-formula-to-cell-exception-from-hresult-0x800a03ec/26591841# 26591841 – 2014-10-27 16:11:26

+0

我有同样的问题 在C#代码中,我键入`xApp.Cells(3,1).FormulaR1C1 =“= SUM(R [-2] C:R [-1] C)”`:failed;那么`xApp.Cells(3,1).FormulaR1C1 =“=(R [-2] C + R [-1] C)”`:失败;然后`xApp.Cells(3,1).FormulaR1C1 =“= A1 + A2”`成功 – 2016-07-12 10:52:53

回答

17

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

这是一个通用的代码,它可以应用于许多无法找到的东西,例如使用当时无效的属性,如PivotItem.SourceNameStandard在PivotItem没有应用过滤器时抛出此问题。 Worksheets["BLAHBLAH"]抛出这个,当工作表不存在等等。一般来说,你要求一个具有特定名称的东西,它不存在。至于为什么,这将采取一些挖掘你的一部分。

检查您的工作表是否确实有您要求的范围,或者.CellName肯定会给出您要求的范围名称。

3

我发现了一个可能的溶胶ution这里:http://www.made4dotnet.com/Default.aspx?tabid=141&aid=15

编辑:

如果您使用Microsoft Visual Basic .NET,微软的Visual C#.NET,或Microsoft Visual C++ Microsoft Excel自动运行,你可以调用某些方法,因为当收到以下错误该机器的区域设置为美国英语(区域设置ID或LCID 1033)以外的东西:

从HRESULT异常:0x800A03EC

和/或

旧的格式或无效的类型库

解决方案1:


要解决这个错误,您可以设置的CurrentCulture为en-US时,执行与Excel和使用这些重置回你的ORIGINALE代码2个功能。

//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; 
} 

解决方案2:


另一种解决方案可以工作,创造下的Microsoft Office \ OFFICE11一个1033的目录(或相应的办公版),EXCEL.EXE复制到1033目录,并将其重命名为xllex.dll。

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

yourRange。值2 =“10/10/09”

根据区域设置该代码可以采取不同导致在Excel投入范围内的任何以下值:

二零零九年十月一十日 2009年9月10日 月9,2010

+0

解决方案1为我工作。在法国,“SUM”的含义是“SOMME”。我通过C#将“SUM”指向我的英文版Excel。公式很好,但Excel表示`#NAME`。在单元格上双击并按下ENTER键后,Excel不显示任何结果。在C#中发送`SOMME`输出`SUM`。所以,解决方案1允许我发送'SUM'而没有错误。 – 2016-07-12 11:42:35

0

枚举名称并调用worksheet.get_Range(name)时遇到此错误代码。它似乎发生在名称不适用于范围时,在我的情况下它是一个宏的名称。

2

我得到了错误,在工作表名称空间:

using (var range = _excelApp.Range["Sheet Name Had Space!$A$1"].WithComCleanup()) 

我通过把周围的表名的单引号用空格固定它:

using (var range = _excelApp.Range["'Sheet Name Had Space'!$A$1"].WithComCleanup()) 
-1

如果你可以复制整个异常,它会好得多,但是一旦我面对这个异常,这是因为从你的dll文件调用的函数,我猜是Aspose.dll没有很好地签名。我想这可能是this

可能的重复,为了找出你的DLL没有被很好地签名,你应该右键单击它并进入签名,它会告诉你它是否有已被电子签名或没有。

1

我有这个问题,当我试图使用range.AddComment()函数。在添加评论之前,我可以通过调用range.ClearComment()来解决这个问题。

4

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

解决的办法是在等号前加一个“'”(撇号),这是告诉excel你不是的方式,实际上是试图写一个公式,只是想打印等于标志。

0

我忘记解除工作簿或工作表时忘记了这一点。

0

完全没有意义的错误800A03EC(微软对Windows的羞耻感)就像是“OPERATION NOT SUPPORTED”。

,当你打开了一个新的Excel版本,当前您的Excel版本不理解创建内容的文档可能发生

  • 当您将文档保存到您从加载它的同一路径(文件已经打开并锁定)

但主要是你会看到这个错误是由于严重错误在Excel中。

  • 例如Microsoft.Office.Interop.Excel.Picture有一个属性“Enabled”。当你打电话给你时,你应该会收到一个bool值。但相反,你会得到一个错误800A03EC。这是一个错误。
  • Exel 2013和2016中存在一个非常胖的错误:当你自动化一个Excel进程并设置Application.Visible=trueApplication.WindowState = XlWindowState.xlMinimized时,你会从不同的函数获取数百个800A03EC错误(如Range.Merge(),CheckBox.Text, Shape.TopLeftCell,Shape.Locked等等)。 Excel 2007和2010中不存在此错误。
0

使用Dominic的答案我发现我的问题的答案在应用到范围之前,源数据中特别是一个无效的DateTiime。在数据库,.NET和Excel之间的某个地方,日期的转换默认为“1/1/1899 12:00:00 AM”。我必须检查它并将其转换为空字符串,并为我修复它。

if (objectArray[row, col].ToString() == "1/1/1899 12:00:00 AM") 
{ 
    objectArray[row, col] = string.Empty; 
} 

这可能是一个非常具体的例子,但希望这将节省别人一些时间,如果他们试图追查一件无效数据。

相关问题