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

时间:2019-01-23 10:58:38

标签: c# excel openxml

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

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

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

Sheet1!$B$3:$D$8

然后我们可以解析并用于检索数据。到目前为止,至少我是这样理解的。

但是,在动态范围内,text属性可以包含如下内容:

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

这不是范围,它是一个返回范围的公式,这是我需要此公式的结果。

是否可以计算该公式,或者结果是否已经存储在电子表格中我可以读取的位置?还是可以通过其他方式读取动态命名范围?

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

1 个答案:

答案 0 :(得分:0)

Excel定义名称实际上是命名公式,而不是命名范围。因此,您将需要诸如VBA评估之类的方法来将公式强制为范围或结果。

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