使用Excel中的Excel.Interop检查Range是否具有名称

时间:2013-10-02 17:50:40

标签: c# excel-interop excel-addins

我目前正在使用C#和Excel Interop处理Excel Addin应用程序。 我正在循环一系列细胞。我试图检查单元格是否命名。

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

是个例外

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

这有点奇怪。

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

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

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

对此方面的任何帮助表示赞赏。

由于

1 个答案:

答案 0 :(得分: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集合,寻找引用您感兴趣的单元格的集合。