代码之家  ›  专栏  ›  技术社区  ›  bornfromanegg

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

  •  0
  • bornfromanegg  · 技术社区  · 6 年前

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

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

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

    Sheet1!$B$3:$D$8
    

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

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

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

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

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

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

    1 回复  |  直到 6 年前
        1
  •  0
  •   Charles Williams    6 年前

    Excel定义的名称实际上是命名公式,而不是命名范围。因此,您需要一个方法(如vba evaluate)将公式强制为一个范围或结果。

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