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

Excel Interop COMException HRESULT: 0x800A03EC when accessing hidden cell

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

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

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

如果我取消隐藏单元格,它工作正常。如果我逐行执行代码,它工作正常(这总是令人沮丧的情况)。

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

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

这是设计使然。根据定义,隐藏单元格不可访问。

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

如果您不同意这种行为,请向 Microsoft 投诉。

感谢大家帮我解开这个谜团。在调试过程中,我注意到它有时神秘地起作用,有时却不起作用,我检查了导致问题行的代码。

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