是否可以使用 OpenXML 读取 Excel 中的动态命名范围?

Is it possible to read Dynamic Named Ranges in Excel using OpenXML?

使用 OpenXML,您可以使用类似于以下内容的方式在 Excel 文档中获取命名范围列表:

 IEnumerable<DefinedName> names = document
          .WorkbookPart
          .Workbook
          .DefinedNames
          .Cast<DefinedName>();

每个 DefinedName 都有一个 Text 属性,它定义了它所指的范围,例如

Sheet1!$B:$D

然后我们可以对其进行解析,并使用它来检索数据。至少到目前为止我是这样理解这个过程的。

但是,对于动态范围,文本 属性 可以包含如下内容:

OFFSET(Sheet1!$F,0,0,COUNTA(Sheet1!$F:$F),1)

这不是一个范围,它是returns一个范围的公式,我需要的就是这个公式的结果。

是否可以计算此公式,或者结果是否已存储在我可以阅读的电子表格中的某个位置?还是有其他方法可以读取动态命名范围?

这个问题专门针对 OpenXML。我知道可以使用其他工具来完成。

Excel 定义名称实际上是命名公式而不是命名范围。因此,您需要一种方法,例如 VBA Evaluate 以将公式强制转换为范围或结果。

AFAIK OpenXML 没有这样的方法,因此您必须编写自己的公式解析器和求值器,或者使用其他工具。