HRESULT:Worksheet.range上的0x800A03EC

时间:2011-08-17 21:31:51

标签: c# vsto excel-interop

我在Worksheet.range方法上获得了HRESULT:0x800A03EC。行数超过70K。 Office 2007。

代码:

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

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

25 个答案:

答案 0 :(得分:24)

如果您使用向后兼容的工作表(.xls)而不是.xlsx

,则会出现此问题

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

答案 1 :(得分:19)

我们收到了相同的信息。例外是

  

Stacktrace:at Microsoft.Office.Interop.Excel._Workbook.SaveAs(Object Filename,Object FileFormat,Object Password,Object WriteResPassword,Object    ReadOnlyRecommended,Object CreateBackup,XlSaveAsAccessMode AccessMode,Object ConflictResolution,Object AddToMru,Object TextCodepage,Object Text   VisualLayout,Object Local)`

内部例外

  

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

我们能够使用this post中的信息解决问题,为方便起见,我在此引用这些信息......

  1. 以管理员身份登录服务器。
  2. 转到“开始” - > “运行”并输入“taskmgr”
  3. 转到任务管理器中的进程选项卡,然后选中“显示所有进程” 用户“
  4. 如果列表中有任何“Excel.exe”条目,请右键单击 输入并选择“结束流程”
  5. 关闭任务管理器。
  6. 转到“开始” - > “运行”并输入“services.msc”
  7. 如果Excel正在运行,请停止服务自动化。
  8. 转到“开始” - > “运行”并输入“dcomcnfg”
  9. 这将打开组件服务窗口,展开“控制台” Root“ - >”Computers“ - >”DCOM Config“
  10. 在组件列表中找到“Microsoft Excel Application”。
  11. 右键单击该条目并选择“属性”
  12. 转到属性对话框中的“身份”标签。
  13. 选择“互动用户”。
  14. 点击“确定”按钮。
  15. 切换到服务控制台
  16. 启动Excel自动化服务
  17. 再次测试您的申请。

答案 2 :(得分:14)

我遇到了这个问题。

发现在我的代码中的某个地方,我要求它从0开始计算(就像你在C#代码中那样)。

原来Excel计数从1开始。

答案 3 :(得分:12)

查看上面的各种响应,并借鉴我自己最近的经验(我得到了这个错误代码做了一些完全不相关的事情 - 设置Application.Calculation)我得出结论,相同的错误代码用于表示多个不相关的问题。所以@Garreh你可能应该问一个新问题(并不是任何人都可以根据错误代码单独提供帮助)。我已经看到了与C#中的Word互操作相同的东西,其中相同的HRESULT似乎几乎用于所有类型的错误。我从未在代码的含义上找到任何令人满意的Microsoft文档。

答案 4 :(得分:5)

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

我检查了我的高清,并表示它是最大的。将一些不需要的文件移动到另一个分区解决了我的问题。

答案 5 :(得分:3)

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

答案 6 :(得分:1)

这不是直接回答问题,但是在打开xlsx文件时我遇到了这个错误。问题是我在文件路径中使用正斜杠。另见https://stackoverflow.com/a/24635904/5932003。它曾用于以前版本的Excel,但不适用于版本1711(Build 8730.2127)。

我能够使用IDispatch-> Invoke(...,EXCEPINFO,...)来诊断问题。 EXCEPINFO对象包含对错误的有用描述。我在C ++的土地上,但我怀疑类似于这篇SO帖子的C#代码可以解决这个问题:Packaging IDispatch Invoke with Parameters in C# (with DISPPARAMS)

答案 7 :(得分:1)

无法回复/签署this answer,因此请点击此处:

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

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

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

答案 8 :(得分:1)

仅供参考,尝试应用行样式时遇到错误....

wSheet.Rows(y).Style = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Red)

答案 9 :(得分: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);
}

答案 10 :(得分:1)

我不明白这个问题。但这是解决我的问题的事情。

转到Excel选项>保存>以这种格式保存文件>选择" Excel工作簿(* .xlsx)"。以前,我的WorkBooks正在[兼容模式]中打开,现在它们正在以正常模式打开。范围功能可以正常工作。

答案 11 :(得分:0)

编辑:这是更好的方式! 抱歉,你不需要那个旧功能。请按以下步骤操作:

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

这应该像魅力一样。并且为了将来参考,请将您正在使用的相关代码放在您的问题中。不要让人们在评论中提出要求。我想这就是你投票的原因。

答案 12 :(得分:0)

我遇到过几次不同的情况,并且每次复制标签名称或在当前情况下总是出现错误,因为我在{ {1}}我试图通过数字和数字而不是字母和数字来获取一个单元格。
让我发疯,因为该错误使我指向几行,但我已注释掉 “错误行” 上方的其他工作表的所有创建该行及其下面的内容都没有问题。
碰巧扫描了上面的几行,发现我在get_Range语句中放入了6 + lastword, C + lastrow,所以当然不能有一个以数字开头的单元格,它始终是字母而不是数字。

答案 13 :(得分:0)

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

如果您尝试传递空值而不是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

答案 14 :(得分:0)

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

答案 15 :(得分:0)

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

答案 16 :(得分:0)

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

mWorkBook = xlApp.Workbooks.Open(FilePath)

mWorkBook.Save();

<强>分辨

答案 17 :(得分:0)

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

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

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

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

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

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

答案 18 :(得分:0)

当您尝试打开Excel工作表并且是否提示任何错误消息时,也会发生此类错误。只需你可以说你的Excel文件已损坏。

答案 19 :(得分:0)

我同意Hugh W的帖子&#34;我得出结论,相同的错误代码用于表示多个不相关的问题&#34;

其他帖子没有提到如果工作表被锁定,则会频繁发生此错误。虽然我还没有对每个场景进行测试,但是当工作表被锁定时,你似乎无法做任何事情,如果你在工作表被锁定时尝试通过VSTO / Com进行此操作,则抛出此错误。例如。更改任何样式工件(字体,字体大小,颜色,下划线),更改Excel验证,更改列宽,行高,公式

答案 20 :(得分:0)

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

答案 21 :(得分: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#开始接受索引。

答案 22 :(得分:0)

执行以下语句时,我有相同的错误代码:

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

原因是&#34; TEXT&#34;之后缺少分号(;)。

这是正确的:

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

答案 23 :(得分:0)

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

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

“工作表大小1,048,576行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

答案 24 :(得分:0)

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