HRESULT:Worksheet.range上的0x800A03EC

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

码:

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

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

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

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

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

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的exception:0x800A03EC 2012-11-01 10:37:59`

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

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

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

我遇到了这个问题。

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

原来Excel计数从1开始。

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

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

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

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

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

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

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

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

我能够使用IDispatch-> Invoke(…,EXCEPINFO,…)来诊断问题。 EXCEPINFO对象包含对错误的有用描述。 我在C ++的土地上,但我怀疑类似于这篇SOpost的C#代码可以解决这个问题: 使用C#中的参数打包IDispatch调用(使用DISPPARAMS) 。

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

 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’并因此错误引发exception。

当我开发一个将项目内容导出到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

无法回复/认可这个答案 ,所以在这里发帖:

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

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

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

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

 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#的索引。

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

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

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

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

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

 mWorkBook = xlApp.Workbooks.Open(FilePath) mWorkBook.Save(); 

解决