我正在使用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);
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 :(得分:17)
错误代码0x800A03EC
(或-2146827284)表示NAME_NOT_FOUND;换句话说,你已经要求了一些东西,Excel无法找到它。
这是一个通用代码,可以应用于许多无法找到的东西,例如:使用当时无效的属性,如PivotItem.SourceNameStandard
,当PivotItem没有应用过滤器时会抛出此属性。当工作表不存在时,Worksheets["BLAHBLAH"]
抛出此内容。通常,您要求具有特定名称的内容并且它不存在。至于为什么,那将会对你进行一些挖掘。
检查您的表单肯定有您要求的范围,或者.CellName
肯定会回复您要求的范围名称。
答案 1 :(得分:4)
我遇到了这个错误,因为我试图将一个字符串写入一个以“=”开头的单元格。
解决方案是在等号之前放一个“'”(撇号),这是一种告诉excel你不是,实际上是在尝试编写一个公式,只想打印等号的方法
答案 2 :(得分:3)
我在这里找到了一个可能的解决方案: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;
}
解决方案2:
另一个可行的解决方案,在Microsoft Office \ Office11(或相应的办公室版本)下创建1033目录,将excel.exe复制到1033目录,并将其重命名为xllex.dll。
虽然您可以使用这些解决方案中的一个解决问题,但是当您在美国英语以外的区域设置中调用Excel对象模型时,Excel对象模型可能会采取不同的行为,并且您的代码可能会以您可能没有想到的方式失败。例如,您可能拥有将范围值设置为日期的代码:
yourRange.Value2 =“10/10/09”
根据区域设置,此代码可能会有不同的行为,导致Excel将以下任何值放入范围内:
2009年10月10日 2009年9月10日 2010年10月9日
答案 3 :(得分:3)
我在工作表名称中有一个空格错误:
using (var range = _excelApp.Range["Sheet Name Had Space!$A$1"].WithComCleanup())
我通过在带有空格的工作表名称周围放置单引号来修复它:
using (var range = _excelApp.Range["'Sheet Name Had Space'!$A$1"].WithComCleanup())
答案 4 :(得分:3)
完全无证件错误800A03EC(微软的耻辱!)的含义类似于"操作不支持"。
可能会发生
但大多数情况下,由于Excel中存在严重的错误,您会看到此错误。
Application.Visible=true
和Application.WindowState = XlWindowState.xlMinimized
时,您将从不同的函数(如Range)中获得数百个800A03EC错误。 Merge(),CheckBox.Text,Shape.TopLeftCell,Shape.Locked等等。 Excel 2007和2010中不存在此错误。答案 5 :(得分:1)
当我尝试使用range.AddComment()函数时遇到了这个问题。我可以通过在添加注释之前调用range.ClearComment()来解决这个问题。
答案 6 :(得分:0)
枚举名称并调用worksheet.get_Range(name)时遇到此错误代码。当名称不适用于范围时,似乎会发生这种情况,在我的情况下,它是宏的名称。
答案 7 :(得分:0)
当我忘记取消保护工作簿或工作表时,我得到了这个。
答案 8 :(得分: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;
}
这可能是一个非常具体的例子,但希望如果他们试图追踪一段无效数据,它会为其他人节省一些时间。
答案 9 :(得分:0)
我遇到了在VBA中运行Excel的类似错误,我学到的是当我从MSSQL中提取数据,然后使用get_range
和.Value2
应用它超出范围时,任何类型为uniqueidentifier
(GUID)的值导致此错误。
只有当我将值转换为nvarcahr(max)
时才有效。
答案 10 :(得分:0)
有趣的是,在打开let seconds = 0
const timer = new Timer(() => {
seconds++
console.log('seconds', seconds)
if (seconds === 8) {
timer.clear()
alert('Game over!')
}
}, 1000)
timer.pause()
console.log('isPaused: ', timer.paused)
setTimeout(() => {
timer.resume()
console.log('isPaused: ', timer.paused)
}, 2500)
function Timer (callback, delay) {
let callbackStartTime
let remaining = 0
this.timerId = null
this.paused = false
this.pause = () => {
this.clear()
remaining -= Date.now() - callbackStartTime
this.paused = true
}
this.resume = () => {
window.setTimeout(this.setTimeout.bind(this), remaining)
this.paused = false
}
this.setTimeout = () => {
this.clear()
this.timerId = window.setInterval(() => {
callbackStartTime = Date.now()
callback()
}, delay)
}
this.clear = () => {
window.clearInterval(this.timerId)
}
this.setTimeout()
}
文件格式不正确或需要修复时,也会发生此错误。
一个很难发现的错误是.xls(旧的excel)文件上的许多行。
测试一下:使用excel桌面手动打开受影响的文件。
我每天使用自动化来处理几百个文件,当出现此错误时,我会通过邮件通知所有者,并将未处理的文件保存在一个临时位置。
答案 11 :(得分:0)
您好,遇到了同样的问题
步骤
在尝试编辑和保存更改时,请确保您正在访问 Excel 文件,而不是处于只读模式(保护模式)。
如果在那之后也发生了,你可以去excel文件-->选项-->公式 并在这里禁用错误检查(这是导致几乎大多数 HRESULT 错误的原因)
答案 12 :(得分:-1)
如果你可以复制整个异常会更好,但是一旦我遇到这个异常,这是因为从你的dll文件中调用的函数,我猜是Aspose.dll还没有很好地签名。我认为这可能是this
的副本仅供参考,为了确定你的dll是否签名不好,你应该右键点击它并转到签名处,它会告诉你它是否已经电子签名好了。