【问题标题】:Named range in Excel/VSTO being returned even after it's been 'deleted' in Excel即使在 Excel 中“删除”后仍返回 Excel/VSTO 中的命名范围
【发布时间】:2012-05-25 16:50:40
【问题描述】:

我正在使用 VSTO(由于客户端请求而在 Visual Studio 2008 上)在单个单元格上创建命名范围,然后将其保存到工作簿并随后在应用程序重新启动时读取。

如果我在 excel 中删除包含一个或多个命名范围的行,保存我的工作簿并重新启动 excel,仍然返回所述行中的命名范围,这就是我的问题。

为了命名单元格,我做了一个简单的 Application.Selection.Name = "whatever"。为了让它们在启动时恢复,我正在使用 Application.ActiveWorkbook.Names。

有人可以告诉我这是否是正确的行为,如果是这样,是否有任何方法可以过滤范围 - 通过 C# excel 互操作代码 - 只过滤当前可见的范围。

提前致谢。

【问题讨论】:

  • 这种行为的原因是“命名范围”实际上是一个命名公式而不是命名范围:所以当您删除命名公式引用的单元格时,引用已删除单元格的命名公式被 #Ref 替换。
  • “仅过滤可见范围”是什么意思?创建一个数组?在工作表上创建 Excel 过滤器?创建一个仅引用可见单元格的多区域范围对象?还是别的什么?

标签: c# excel vsto named-ranges


【解决方案1】:

是的,这是正确的行为,与 VSTO 无关。

当您删除具有名称的范围时,该名称不会被删除。相反,它被一个无效的引用替换:

Sheet1!#REF!  

检测此类名称的最简单方法是在读取 RefersToRange 属性时捕获异常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-30
    • 1970-01-01
    • 2020-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多