OpenXML可以返回一个公式的结果

我使用下面的一段代码作为一个较大的项目的一部分 – 该程序基本上读取电子表格基于从下拉框中select的工作表 – 它然后将结果分配给一个数据表 – 我有一个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!A12,基本上,无论用户input到Sheet1中,A12都应显示在单元格中。 现在电子表格中已经有了填写的信息,但是程序并没有把这个结果只是公式。

一个例子是:Sheet 1 A12包含单词“Dog”,这意味着在Sheet2中单元格A4的公式为Sheet1A12,应显示“Dog”(它在Excel中执行,但在程序中不执行)。

考虑到OpenXML已经存在,OpenXML能够显示结果吗?

我不完全同意这两个答案。 我已经做了一个快速testing,在新工作簿的工作表Sheet1中添加了一些值和总和公式,保存为xmlx,解压缩并查看/xl/worksheets/sheet1.xml。

 <row r="14" spans="1:1" x14ac:dyDescent="0.25"> <cr="A14"> <f>SUM(A1:A13)</f> <v>1295</v> </c> </row> 

正如你所看到的,公式及其计算值都是可见的。 然后,我做了一个精致的search,发现这个: OpenXML SDK:使Excel重新计算公式

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

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

对不起,不行。 OpenXML SDK只是一组用于在低级别操作Word,Excel和PowerPoint文件的类。 公式以纯文本forms存储,您需要为此实现公式评估程序。 如果您想参与这项工作,请参阅翻译devise模式 。

还可以使用SDK提供的属性来访问单元格数据(CellValue,CellFormula)。 另外请注意,Excel并不总是填充数据types(只有当它不能被正确地推断,更确切地说,例如:共享string,而不是读取数值作为数字填充数据types,以告诉该数字实际上是一个索引在共享string表中,就像你的代码片段所示)。

我没有使用ClosedXML,但我听说这是值得一试。