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能够显示考虑到它已经存在的结果?
我不太同意给出的两个答案。我做了一个快速测试,将一些值和求和公式添加到新工作簿的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,但我听说它值得一试。
返回一个公式的结果: