我目前正在使用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?
有没有办法检查范围是否有名称。我似乎没有找到任何其他解决方案。
对此方面的任何帮助表示赞赏。
由于
答案 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
集合,寻找引用您感兴趣的单元格的集合。