Tee*_*sej 19 c# excel vsto exception
我正在使用Window Service项目.必须在序列时间内将数据写入Excel文件中的工作表.
但有时,有时候,服务会在尝试获取带有单元名称的范围时抛出异常"HRESULT异常:0x800A03EC".
我已经打开excel表的代码,并在这里获取单元格.
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肯定会回复您要求的范围名称.
我遇到了这个错误,因为我试图将一个字符串写入以“=”开头的单元格。
解决方案是在等号之前放置一个“'”(撇号),这是一种告诉 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日
完全未记录的错误 800A03EC(微软的耻辱!)的含义类似于“不支持操作”。
它可能会发生
但大多数情况下,您会因为 Excel 中的严重错误而看到此错误。
Application.Visible=true您Application.WindowState = XlWindowState.xlMinimized会从不同的函数(例如 Range.Merge()、CheckBox.Text、Shape.TopLeftCell、Shape)中收到数百个 800A03EC 错误.锁定等等)。Excel 2007 和 2010 中不存在此错误。| 归档时间: |
|
| 查看次数: |
101140 次 |
| 最近记录: |