OpenXML能返回公式的结果吗?

本文关键字:结果 返回 OpenXML | 更新日期: 2023-09-27 18:10:29

我使用以下代码片段作为更大项目的一部分-程序基本上根据从下拉框中选择的工作表读取电子表格-然后将结果分配给数据表-我有一个for循环,运行以下函数以获取Cell内容并将其添加到数据表

 public string GetValue(Cell cell, SharedStringTablePart stringTablePart)
    {
        if (cell.ChildElements.Count == 0) return null;
        //get cell value
        string value = cell.ElementAt(0).InnerText;//CellValue.InnerText;

        //Look up real value from shared string table
        if ((cell.DataType != null) && (cell.DataType == CellValues.SharedString))
            value = stringTablePart.SharedStringTable.ChildElements[Int32.Parse(value)].InnerText;
        return value;
    }

在电子表格中,我使用然而,这返回一个公式,而不是结果。电子表格公式是=Sheet1!实际上,用户在Sheet1 A12中输入的任何内容都应该显示在单元格中。现在电子表格已经填好了信息,但是程序不会只拉出公式的结果。

这方面的一个例子是:工作表1A12包含单词"狗",这意味着在Sheet2单元格A4有公式=Sheet1A12,应该显示"狗"(这在excel中是这样做的,但在程序中不是)。

是否OpenXML能够显示考虑到它已经存在的结果?

OpenXML能返回公式的结果吗?

我不太同意给出的两个答案。我做了一个快速测试,将一些值和求和公式添加到新工作簿的sheet1,保存为xmlx,解压缩并查看/xl/worksheets/sheet1.xml。

<row r="14" spans="1:1" x14ac:dyDescent="0.25">
    <c r="A14">
        <f>SUM(A1:A13)</f>
        <v>1295</v>
    </c>
</row>
如您所见,公式及其计算值都是可见的。然后我做了一个精细的搜索,发现了这个:OpenXML SDK:使Excel重新计算公式

简而言之:绝对应该可以访问公式值,甚至可以在需要时重新计算。

OpenXml只是保存电子表格内容的格式。要获得单元格的结果,您需要电子表格引擎(即excel)

抱歉,不行。OpenXML SDK只是一组用于在底层操作Word、Excel和PowerPoint文件的类。公式以纯文本形式存储,因此需要为此实现一个公式求值器。如果你想参与进来,请参阅解释器设计模式。

还使用SDK提供的属性来访问单元格数据(CellValue, CellFormula)。还要注意,Excel并不总是填充DataType(只有当它不能被正确地推断为更精确时,例如:共享字符串,而不是将值作为数字读取,它填充数据类型以告诉该数字实际上是共享字符串表中的索引,如您的代码片段所示)。

我没有使用过ClosedXML,但我听说它值得一试。

返回一个公式的结果: