3

我目前正在使用 C# 和 Excel 互操作开发 Excel 插件应用程序。我正在遍历一系列单元格。我正在尝试检查一个单元格是否已命名。

但是,当我尝试添加 if 条件时,如果未命名范围,则会引发异常。例外是

System.Runtime.InteropServices.COMException (0x800A03EC):来自 HRESULT 的异常:0x800A03EC

这有点奇怪。

if(r.Name == null)
{
    item.name="Not named";
} else 
{
    item.name = r.Name.Name;
}

如果条件本身会抛出异常,为什么 Range 对象如果没有命名则不返回 null ?

有没有办法检查范围是否有名称。我似乎没有找到任何其他解决方案。

感谢您在这方面提供任何帮助。

谢谢

4

1 回答 1

1

如果条件本身会抛出异常,为什么 Range 对象如果没有命名则不返回 null ?

这正是 Excel 对象模型的工作方式,如果您尝试从 VBA 代码访问 Range.Name,您将获得相同的结果。

您的选择是:

  • 捕捉异常,例如

    public string GetRangeName(range As Range)
    {
        try
        {
            var name = range.Name;
            if (name == null) return null; // Won't happen in the current version of Excel, but who knows for a future version
            return name.Name;
        }
        catch(COMException)
        {
            return null;
        }
    }
    
  • 或者,遍历Names工作表及其工作簿的集合,查找引用您感兴趣的单元格的集合。

于 2013-10-02T19:58:30.700 回答