我在 Worksheet.range 方法上得到 HRESULT: 0x800A03EC。行数超过 70K。办公室 2007。
代码:
Microsoft.Office.Interop.Excel.Range neededRange
= currentWS.Range[cell.Cells[1, 1], cell.Cells[nRowCount, nColumnCount]];
在这里,我的行数超过 65530 。打破这个功能。我观察到它只有在行数超过 65530 时才会中断。
我在 Worksheet.range 方法上得到 HRESULT: 0x800A03EC。行数超过 70K。办公室 2007。
代码:
Microsoft.Office.Interop.Excel.Range neededRange
= currentWS.Range[cell.Cells[1, 1], cell.Cells[nRowCount, nColumnCount]];
在这里,我的行数超过 65530 。打破这个功能。我观察到它只有在行数超过 65530 时才会中断。
如果您使用向后兼容的工作表 (.xls) 而不是 .xlsx,则会出现此问题
要允许在 pre office 2007 版本中打开工作表,它不能包含超过 65k 行。您可以使用 ctrl+arrowdown 检查工作表中的行数,直到到达底部。如果您尝试获得大于该行数的范围,则会产生错误
我们收到了同样的东西。例外是
Stacktrace:在 Microsoft.Office.Interop.Excel._Workbook.SaveAs(对象文件名、对象文件格式、对象密码、对象 WriteResPassword、对象 ReadOnlyRecommended、对象 CreateBackup、XlSaveAsAccessMode AccessMode、对象 ConflictResolution、对象 AddToMru、对象 TextCodepage、对象文本 VisualLayout、对象本地)`
除了内部的例外
HRESULT 异常:0x800A03EC 2012-11-01 10:37:59`
我们能够使用这篇文章中的信息解决问题,为了方便起见,我在这里引用了这些信息......
我遇到了这个问题。
发现在我的代码中某处我要求它从 0 开始计数(就像在 C# 代码中一样)。
结果 Excel 计数从 1 开始。
查看上面的各种回复,并借鉴我自己最近的经验(我得到这个错误代码做了一些完全不相关的事情——设置Application.Calculation),我得出结论,相同的错误代码用于指示多个不相关的问题。所以@Garreh 你可能应该问一个新问题(并不是说任何人都能够仅根据错误代码提供帮助)。我在 C# 中使用 Word 互操作时看到了同样的情况HRESULT,几乎所有类型的错误似乎都使用了相同的方法。我从来没有找到任何令人满意的 Microsoft 文档来说明这些代码的含义。
如果您要保存的分区上没有空间,也可能会导致这种情况。
我检查了我的高清并发现它已被最大化。将一些不需要的文件移动到不同的分区解决了我的问题。
简单地说,excel文件已损坏。最好的解决方案是更改/修复文件。(复制现有文件并重命名)
我不明白这个问题。但这是解决我的问题的东西。
转到 Excel 选项 > 保存 > 以这种格式保存文件 > 选择“Excel 工作簿 (*.xlsx)”。以前,我的工作簿以 [兼容模式] 打开,现在它们以正常模式打开。Range 函数可以很好地处理它。
仅供参考,尝试应用行样式时出错....
wSheet.Rows(y).Style = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Red)
无法回复/认可此答案,因此在此处发布:
实际上,将数据从一个范围移动到另一个范围时源/目标范围的格式也可能导致此错误。
在我的例子中,我想要复制的范围包含一个日期格式的列,并且该列包含一个具有无效日期值的单元格(由于它的值是负整数,它甚至没有被格式化)。因此,两个范围之间的复制操作在所述单元格处停止,从而产生此处讨论的错误消息。
在我的情况下,解决方案是使用Range.Value2而不是Range.Value,这导致 Excel 绕过将单元格格式化为日期(更多详细信息here)。但是,这将使您的日期和时间列显示为整数和小数。但是,如果您通过相应地设置其Range/Column/Cell.NumberFormat属性知道在何处期望日期和时间值,您将能够将格式更改为所需的格式。
这不是直接回答问题,但在打开 xlsx 文件时出现此错误。问题是我在文件路径中使用了正斜杠。另请参阅https://stackoverflow.com/a/24635904/5932003。它曾经在早期版本的 Excel 中工作,但不适用于版本 1711(内部版本 8730.2127)。
我能够使用 IDispatch->Invoke(..., EXCEPINFO, ...) 诊断问题。EXCEPINFO 对象包含对出错原因的有用描述。我在 C++ 领域,但我怀疑与此 SO 帖子类似的 C# 代码可以解决问题:Packaging IDispatch Invoke with Parameters in C# (with DISPARAMS)。
尝试在 VS 2017 中保存在我的 .Net 应用程序中创建的 Excel 文件时收到此错误代码 0x800A03EC。我更改了 Excel.Application 对象属性 Visible=True 并让它运行直到出现故障。尝试在 Excel 中手动完成这些步骤,然后发现由于缺少文件夹权限而无法保存文件。我向文件夹添加了写入权限,错误消失了。
对于像我这样有同样例外的人:
如果您尝试传递空值而不是 Missing.Value(或 Type.Missing),也会发生这种情况
例如
Worksheet worksheet = ...;
return worksheet.Range["A1", null]; //This call generates the error 0x800A03EC
return worksheet.Range["A1", Missing.Value]; //This works correctly
2021年,当我遇到这个问题时。原因实际上是:
对于 Excel 范围或单元格,我试图直接添加/删除评论,而不检查是否有评论绑定。
错误代码是:
if ( comments_string.Length != 0)
{ range.AddComment( comments_string);
}
工作代码是:
if ( comments_string.Length != 0)
{ if (range.Comment != null) range.Comment.Delete();
range.AddComment(comments_string);
}
编辑:这好多了!!!抱歉,您不需要那个旧功能。只需执行以下操作:
Microsoft.Office.Interop.Excel.Range neededRange = currentWS.Range["A1", ((Microsoft.Office.Interop.Excel.Range)currentWS.Cells[nRowCount, nColumnCount])];
这应该像一个魅力。为了将来参考,请将您正在使用的相关代码放在您的问题中。不要让人们在评论中要求它。我想这就是你被否决的原因。
当我尝试将单元格数组分配给 range.Value 时,我遇到了精确代码错误。就我而言,这是错误数据格式的问题。单元格的数据格式设置为 DATE,但用户犯了一个错误,而不是“20.02.2013”输入日期“20.02.0213”。Excel 的 COM 对象拒绝接受年份 '0213' 并抛出异常并出现此错误。
当我开发一个将项目内容导出到 excel 文件的应用程序时,我也遇到了同样的问题。
我在论坛中找不到解决我的问题的方法,然后我检查了 excel 的最大容量,发现下面的链接说
“工作表大小为 1,048,576 行 x 16,384 列”,这就是我的问题,我导出的行数不止这些行。详情请参考以下链接
问候 Prashant Neve
执行以下语句时出现相同的错误代码:
sheet.QueryTables.Add("TEXT" & Path.GetFullPath(fileName), "1:1", Type.Missing)
原因是“TEXT”后缺少分号(;)。
这是正确的:
sheet.QueryTables.Add("TEXT;" & Path.GetFullPath(fileName), "1:1", Type.Missing)
我得到了这个例外,因为我输入了:
ws.get_Range("K:K").EntireColumn.AutoFit();
ws.get_Range("N:N").EntireColumn.AutoFit();
ws.get_Range("0:0").EntireColumn.AutoFit();
看到错误了吗?提示:Excel 接受从 1 开始的索引,但不像 C# 那样从 0 开始。
我收到此错误是因为我尝试重命名包含太多字符的工作表
我同意 Hugh W 的帖子“我得出结论,相同的错误代码用于指示多个不相关的问题”
其他帖子没有提到如果工作表被锁定,这个错误会经常发生。虽然我没有测试所有场景,但如果您在工作表被锁定时尝试通过 VSTO/Com 执行此操作,那么当工作表被锁定时,您似乎无法在 excel 中执行的任何操作都会引发此错误。EG 更改任何样式工件(字体、字体大小、颜色、下划线)、更改 Excel 验证、更改列宽、行高、公式
我通过使用下面的代码解决了这个问题。请不要在这些函数中使用其他参数。
mWorkBook = xlApp.Workbooks.Open(FilePath)
mWorkBook.Save();
解决
似乎这是一个非常通用的错误,因为您尝试的操作“出了点问题”。我观察到,如果您有公式错误并将该公式分配到单元格中,也会发生这种情况。例如“=fubar()”
我遇到过几次不同的情况,每次复制选项卡名称时总是出现一些错误,或者在当前的情况下,它只是发生了,因为我只是在尝试通过数字和数字获取单元格的地方有错字get_Range而不是字母和数字。
让我发疯,因为错误将我指向了几行,但我已经注释掉了“错误行”上方其他工作表的所有创建,并且该行及以下的工作表是毫无问题地创建的。
碰巧扫描了上面的几行,看到我写6 + lastword, C + lastrow了我的get_Range声明,当然你不能有一个以数字开头的单元格,它总是字母而不是数字。
我遇到了同样的错误。对我来说,是在尝试分别设置 CountIf 和 CountIfs 时出现错误。
经过一些试验,我发现这是一个使用多个参数的所有公式的问题。
原来参数分隔符“;” (分号),我在 excel 中使用的不是我在后面的代码中使用的正确的。如果我改用“,”(逗号),则正确使用了该公式。注意:之后在Excel中查看时,显示为“;” (分号)。
我的试错过程包括尝试设置一堆不同的公式,这就是我最终得到的“修复”。我正在运行英文窗口,但我位于丹麦,我不知道我的问题是否涉及某种本地化。
CultureInfo.CurrentCulture.TextInfo.ListSeparator 是“;”,这适用于分隔验证器规则值。也许这就是为什么我的参数分隔符是别的东西的原因。
无论如何; 该公式可能是错误的,因为您需要使用不同的参数分隔符。
我有同样的错误代码。原来这里的评论帮助了我。计数不是从 0 开始的。注释掉的行抛出了这个错误。
string cell = (string)range.Cells[3, 3].Value;
这条线工作得很好
string QuestionID = (string)range.Cells[1, 0].Value;这一行抛出了这个错误
当excel文件由于某种原因损坏时,也会发生这种类型的错误