Excel Interop COMException HRESULT:0x800A03EC访问隐藏单元格时

时间:2016-11-16 21:36:45

标签: c# .net excel excel-interop

在隐藏单元格时,我使用Excel Interop从C#访问Excel中的命名单元格时遇到问题,我这样访问它:

bool SomeBoolean = WorkSheet.Range["MyRangeName"].Value;

当我访问它时,Range属性隐式调用get_range,这是根据堆栈跟踪抛出异常的原因。用于直接调用get_range的代码,结果类似。

如果我取消隐藏细胞,它可以正常工作。如果我逐行遍历代码,它可以正常工作(这总是令人沮丧的情况)。

当然,我可以通过取消隐藏细胞来解决这个问题,但我想尝试找到更优雅的解决方案。我已经仔细阅读了MSDN文档以及SO上的几个主题,但我似乎找不到任何东西。任何帮助将不胜感激!

Worksheet.Range的MSDN页面:https://msdn.microsoft.com/en-us/library/office/ff836512.aspx

2 个答案:

答案 0 :(得分:1)

这是设计的。根据定义,无法访问隐藏的单元格。

亲自尝试一下。在Excel中创建工作表,隐藏一些列,然后搜索(按值,而不是公式)查看隐藏单元格中的值。您将看到一个对话框,指示无法找到该值。

如果您不同意此行为,请与Microsoft联系。

enter image description here

答案 1 :(得分:0)

感谢大家帮我解开这个谜团。在我的调试过程中,我注意到它有时会工作,神秘,有时则不然,而且我查看了导致相关行的代码。

此问题的原因是正在从工作表中搜索范围,该工作表在调用插件时设置为当前选定的工作表。因此,如果在调用时未选择工作簿中的正确选项卡,则会失败。如果选中,则成功。事实证明它与被隐藏的细胞无关。相当令人沮丧,但至少现在我们知道了!