30

我在 Worksheet.range 方法上得到 HRESULT: 0x800A03EC。行数超过 70K。办公室 2007。

代码:

Microsoft.Office.Interop.Excel.Range neededRange
    = currentWS.Range[cell.Cells[1, 1], cell.Cells[nRowCount, nColumnCount]];

在这里,我的行数超过 65530 。打破这个功能。我观察到它只有在行数超过 65530 时才会中断。

4

26 回答 26

27

如果您使用向后兼容的工作表 (.xls) 而不是 .xlsx,则会出现此问题

要允许在 pre office 2007 版本中打开工作表,它不能包含超过 65k 行。您可以使用 ctrl+arrowdown 检查工作表中的行数,直到到达底部。如果您尝试获得大于该行数的范围,则会产生错误

于 2011-08-18T13:45:31.107 回答
19

我们收到了同样的东西。例外是

Stacktrace:在 Microsoft.Office.Interop.Excel._Workbook.SaveAs(对象文件名、对象文件格式、对象密码、对象 WriteResPassword、对象 ReadOnlyRecommended、对象 CreateBackup、XlSaveAsAccessMode AccessMode、对象 ConflictResolution、对象 AddToMru、对象 TextCodepage、对象文本 VisualLayout、对象本地)`

除了内部的例外

HRESULT 异常:0x800A03EC 2012-11-01 10:37:59`

我们能够使用这篇文章中的信息解决问题,为了方便起见,我在这里引用了这些信息......

  1. 以管理员身份登录服务器。
  2. 转到“开始”->“运行”并输入“taskmgr”
  3. 转到任务管理器中的进程选项卡并选中“显示所有用户的进程”
  4. 如果列表中有任何“Excel.exe”条目,请右键单击该条目并选择“结束进程”
  5. 关闭任务管理器。
  6. 转到“开始”->“运行”并输入“services.msc”
  7. 如果它正在运行,请停止自动执行 Excel 的服务。
  8. 转到“开始”->“运行”并输入“dcomcnfg”
  9. 这将打开组件服务窗口,展开“控制台根”->“计算机”->“DCOM 配置”
  10. 在组件列表中找到“Microsoft Excel 应用程序”。
  11. 右键单击条目并选择“属性”
  12. 转到属性对话框上的“身份”选项卡。
  13. 选择“交互式用户”。
  14. 单击“确定”按钮。
  15. 切换到服务控制台
  16. 启动服务自动化 Excel
  17. 再次测试您的应用程序。
于 2012-11-01T10:11:03.920 回答
18

我遇到了这个问题。

发现在我的代码中某处我要求它从 0 开始计数(就像在 C# 代码中一样)。

结果 Excel 计数从 1 开始。

于 2015-02-02T10:47:05.740 回答
13

查看上面的各种回复,并借鉴我自己最近的经验(我得到这个错误代码做了一些完全不相关的事情——设置Application.Calculation),我得出结论,相同的错误代码用于指示多个不相关的问题。所以@Garreh 你可能应该问一个新问题(并不是说任何人都能够仅根据错误代码提供帮助)。我在 C# 中使用 Word 互操作时看到了同样的情况HRESULT,几乎所有类型的错误似乎都使用了相同的方法。我从来没有找到任何令人满意的 Microsoft 文档来说明这些代码的含义。

于 2013-02-11T17:29:27.990 回答
5

如果您要保存的分区上没有空间,也可能会导致这种情况。

我检查了我的高清并发现它已被最大化。将一些不需要的文件移动到不同的分区解决了我的问题。

于 2012-11-07T15:33:55.437 回答
3

简单地说,excel文件已损坏。最好的解决方案是更改/修复文件。(复制现有文件并重命名)

于 2012-10-23T05:17:11.933 回答
1

我不明白这个问题。但这是解决我的问题的东西。

转到 Excel 选项 > 保存 > 以这种格式保存文件 > 选择“Excel 工作簿 (*.xlsx)”。以前,我的工作簿以 [兼容模式] 打开,现在它们以正常模式打开。Range 函数可以很好地处理它。

于 2011-08-18T16:10:52.917 回答
1

仅供参考,尝试应用行样式时出错....

wSheet.Rows(y).Style = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Red)
于 2016-06-09T16:26:07.263 回答
1

无法回复/认可此答案,因此在此处发布:

实际上,将数据从一个范围移动到另一个范围时源/目标范围的格式也可能导致此错误。

在我的例子中,我想要复制的范围包含一个日期格式的列,并且该列包含一个具有无效日期值的单元格(由于它的值是负整数,它甚至没有被格式化)。因此,两个范围之间的复制操作在所述单元格处停止,从而产生此处讨论的错误消息。

在我的情况下,解决方案是使用Range.Value2而不是Range.Value,这导致 Excel 绕过将单元格格式化为日期(更多详细信息here)。但是,这将使您的日期和时间列显示为整数和小数。但是,如果您通过相应地设置其Range/Column/Cell.NumberFormat属性知道在何处期望日期和时间值,您将能够将格式更改为所需的格式。

于 2016-06-23T11:00:48.357 回答
1

这不是直接回答问题,但在打开 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)

于 2018-01-02T16:03:20.787 回答
1

尝试在 VS 2017 中保存在我的 .Net 应用程序中创建的 Excel 文件时收到此错误代码 0x800A03EC。我更改了 Excel.Application 对象属性 Visible=True 并让它运行直到出现故障。尝试在 Excel 中手动完成这些步骤,然后发现由于缺少文件夹权限而无法保存文件。我向文件夹添加了写入权限,错误消失了。

于 2019-01-03T17:39:42.123 回答
1

对于像我这样有同样例外的人:

如果您尝试传递空值而不是 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
于 2019-05-06T09:32:40.160 回答
1

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);
}
于 2021-02-12T13:26:47.360 回答
0

编辑:这好多了!!!抱歉,您不需要那个旧功能。只需执行以下操作:

Microsoft.Office.Interop.Excel.Range neededRange = currentWS.Range["A1", ((Microsoft.Office.Interop.Excel.Range)currentWS.Cells[nRowCount, nColumnCount])];

这应该像一个魅力。为了将来参考,请将您正在使用的相关代码放在您的问题中。不要让人们在评论中要求它。我想这就是你被否决的原因。

于 2011-08-17T22:25:23.143 回答
0

当我尝试将单元格数组分配给 range.Value 时,我遇到了精确代码错误。就我而言,这是错误数据格式的问题。单元格的数据格式设置为 DATE,但用户犯了一个错误,而不是“20.02.2013”​​输入日期“20.02.0213”。Excel 的 COM 对象拒绝接受年份 '0213' 并抛出异常并出现此错误。

于 2015-02-21T21:00:39.483 回答
0

当我开发一个将项目内容导出到 excel 文件的应用程序时,我也遇到了同样的问题。

我在论坛中找不到解决我的问题的方法,然后我检查了 excel 的最大容量,发现下面的链接说

“工作表大小为 1,048,576 行 x 16,384 列”,这就是我的问题,我导出的行数不止这些行。详情请参考以下链接

http://answers.microsoft.com/en-us/office/forum/office_2013_release-excel/with-excel-2013how-many-rows-will-this-contain/271264fb-3ab8-4c5b-aa0d-7095c5ac6108

问候 Prashant Neve

于 2016-02-05T04:04:06.783 回答
0

执行以下语句时出现相同的错误代码:

sheet.QueryTables.Add("TEXT" & Path.GetFullPath(fileName), "1:1", Type.Missing)

原因是“TEXT”后缺少分号(;)。

这是正确的:

sheet.QueryTables.Add("TEXT;" & Path.GetFullPath(fileName), "1:1", Type.Missing)
于 2017-02-02T14:08:45.867 回答
0

我得到了这个例外,因为我输入了:

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 开始。

于 2017-03-10T10:14:50.810 回答
0

我收到此错误是因为我尝试重命名包含太多字符的工作表

于 2017-05-29T08:56:21.740 回答
0

我同意 Hugh W 的帖子“我得出结论,相同的错误代码用于指示多个不相关的问题”

其他帖子没有提到如果工作表被锁定,这个错误会经常发生。虽然我没有测试所有场景,但如果您在工作表被锁定时尝试通过 VSTO/Com 执行此操作,那么当工作表被锁定时,您似乎无法在 excel 中执行的任何操作都会引发此错误。EG 更改任何样式工件(字体、字体大小、颜色、下划线)、更改 Excel 验证、更改列宽、行高、公式

于 2017-09-08T00:29:17.597 回答
0

我通过使用下面的代码解决了这个问题。请不要在这些函数中使用其他参数。

mWorkBook = xlApp.Workbooks.Open(FilePath)

mWorkBook.Save();

解决

于 2018-04-25T07:40:49.437 回答
0

似乎这是一个非常通用的错误,因为您尝试的操作“出了点问题”。我观察到,如果您有公式错误并将该公式分配到单元格中,也会发生这种情况。例如“=fubar()”

于 2019-04-17T19:39:31.710 回答
0

我遇到过几次不同的情况,每次复制选项卡名称时总是出现一些错误,或者在当前的情况下,它只是发生了,因为我只是在尝试通过数字和数字获取单元格的地方有错字get_Range而不是字母和数字。
让我发疯,因为错误将我指向了几行,但我已经注释掉了“错误行”上方其他工作表的所有创建,并且该行及以下的工作表是毫无问题地创建的。
碰巧扫描了上面的几行,看到我写6 + lastword, C + lastrow了我的get_Range声明,当然你不能有一个以数字开头的单元格,它总是字母而不是数字。

于 2019-09-30T07:09:27.290 回答
0

我遇到了同样的错误。对我来说,是在尝试分别设置 CountIf 和 CountIfs 时出现错误。

经过一些试验,我发现这是一个使用多个参数的所有公式的问题。

原来参数分隔符“;” (分号),我在 excel 中使用的不是我在后面的代码中使用的正确的。如果我改用“,”(逗号),则正确使用了该公式。注意:之后在Excel中查看时,显示为“;” (分号)。

我的试错过程包括尝试设置一堆不同的公式,这就是我最终得到的“修复”。我正在运行英文窗口,但我位于丹麦,我不知道我的问题是否涉及某种本地化。

CultureInfo.CurrentCulture.TextInfo.ListSeparator 是“;”,这适用于分隔验证器规则值。也许这就是为什么我的参数分隔符是别的东西的原因。

无论如何; 该公式可能是错误的,因为您需要使用不同的参数分隔符。

于 2021-07-28T08:14:42.287 回答
0

我有同样的错误代码。原来这里的评论帮助了我。计数不是从 0 开始的。注释掉的行抛出了这个错误。

string cell = (string)range.Cells[3, 3].Value; 这条线工作得很好

string QuestionID = (string)range.Cells[1, 0].Value;这一行抛出了这个错误

于 2021-12-22T17:21:15.950 回答
-1

当excel文件由于某种原因损坏时,也会发生这种类型的错误

于 2017-12-01T09:00:14.067 回答