HRESULT:Worksheet.range上的0x800A03EC

问题描述 投票:21回答:22

我在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时才会中断。

c# vsto excel-interop
22个回答
24
投票

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

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


1
投票

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

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


1
投票

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


0
投票

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

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

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


0
投票

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


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

关心Pacific Neve


0
投票

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

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

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

这是正确的:

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

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
投票

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


0
投票

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

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


0
投票

当您尝试打开Excel工作表时,如果它提示任何错误消息,也会发生此类错误。只需你可以说你的excel文件被破坏了。


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本地)`

内在的例外

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

我们能够用来自this post的信息来解决这个问题,为方便起见,我在这里引用这个信息......

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

0
投票

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

mWorkBook = xlApp.Workbooks.Open(FilePath)

mWorkBook.Save();

解决


0
投票

看起来像这样,对于你尝试的操作“出错了”,这是一个非常普遍的错误。我观察到,如果您有公式错误并将该公式分配到单元格中,也会发生这种情况。例如。 “= FUBAR()”


0
投票

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

如果您尝试传递空值而不是Missing.Value(或Type.Missing),也会发生这种情况

EG

Worksheet worksheet = ...;
return worksheet.Range["A1", null]; //This call generates the error 0x800A03EC

return worksheet.Range["A1", Missing.Value]; //This works correctly

14
投票

我遇到了这个问题。

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

原来Excel计数从1开始。


12
投票

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


5
投票

如果您要保存的分区没有空间,也可能会导致此问题。

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


3
投票

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


1
投票

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

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


1
投票

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

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

1
投票

无法回复/认可this answer,所以在这里发帖:

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.