【问题标题】:C# Excel Interop: Exception from HRESULT: 0x800A03EC while using Range.set_ValueC# Excel 互操作:来自 HRESULT 的异常:使用 Range.set_Value 时出现 0x800A03EC
【发布时间】:2020-10-07 02:13:15
【问题描述】:

我在 C# WinForms 应用程序中使用 Office 互操作库将大约 25000 行和 110 列数据写入 Excel 2016。任何元素的最大值长度为 420 个字符。

我正在使用二维对象数组从 DataTable 中读取值,并将此数组传递给 Range.set_Value 方法。

该应用程序在其他 DataTables 上运行良好,但对于特定数据,我收到错误:

来自 HRESULT 的 C# 异常:0x800A03EC

在使用Range.set_Value 时。我无法弄清楚 25000 行和 110 列中的哪一个导致了错误。

我当然可以开始将数据分成小块,直到我确定确切的行和列导致问题,但是有更好的方法来调试问题吗?

数据可能包含各种特殊字符(数据由第三方应用生成)。

编辑 1:

我了解到,如果是 Excel 2007,则不能添加超过 8192 个字符的单元格。但我的数据在任何单元格中最多包含 425 个字符,而我的 Excel 版本是 2016。

【问题讨论】:

  • 您是否在寻找内部异常?
  • InnerException 为空
  • COM 调用失败,你必须有一个计划。您还应该考虑实现 IMessageFilter 以便您可以告诉 COM 重试。即使使用过滤器,您也需要实施某种类型的重试策略。
  • COM 调用仅在包含大约 25000 行的特定数据时失败,并且在多次重试后无法正常工作。相同的代码适用于所有其他数据集

标签: c# export-to-excel excel-interop


【解决方案1】:

经过反复试验,我能够找到数据的问题。

二维数组中的一些元素以“=”字符开头,这在 Excel 中被视为公式的开头。由于元素值不是有效的公式,所以 Excel 抛出异常。

我在这些文本值前面加上 ' 符号,一切正常。

希望这对某人有所帮助。

【讨论】:

    猜你喜欢
    • 2011-08-13
    • 1970-01-01
    • 2013-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多