首页 > 解决方案 > 有没有办法使用 .NET 和 Open-xml 读取 Excel 文件单元格中公式的输出值?

问题描述

问题总结

如何使用 .NET 和 Openxml 读取单元格中公式的输出值。

目标

使用 .NET open-xml 读取包含公式的单元格的值,该值不是在编译时计算的,而是在运行时计算的。例如,如果我们有一个带有公式的单元格:=SUM(O32:O80)。我需要在使用 .NET 评估此公式后​​读取输出值。

在我的情况下,只有当您打开 excel 文件并按下启用编辑按钮时,才会计算公式,然后才会计算公式。

换句话说,有没有办法强制计算单元格的公式,然后从 .NET 读取输出单元格值。

不相关的答案

由于公式的值没有在编译时计算,我想说一个不相关的答案将是:

using (SpreadsheetDocument spreadSheet = SpreadsheetDocument.Open(tmpTempletePath, true)){
   ...
   Cell cell = row.Elements<Cell>().Where(c => c.CellReference.Value == cellReference).FirstOrDefault();
string value = workbookPart.SharedStringTablePart.SharedStringTable.Elements<SharedStringItem>().ElementAt(Convert.ToInt32(cell.CellValue.Text)).InnerText;

我试过了:

Report.Workbook.CalculationProperties.CalculationOnSave = true;
Report.Workbook.CalculationProperties.ForceFullCalculation = true;
Report.Workbook.CalculationProperties.FullCalculationOnLoad = true;

为什么上面的答案不相关

因为这些答案给出了单元格的值,而不是单元格中包含的公式的计算输出值。就我而言,我正在处理的 excel 文档是一个非常复杂的价格计算文档,其中包含 70 多个指向范围和单元格的已定义名称,以及在其计算中包含这些已定义名称的大量公式以计算总价格值。这意味着根据我拥有的数据在 C# 中进行计算,与仅在运行时由 excel 计算后读取值相比是一个大项目。

主意

我想在工作表中包含一个基于视觉的按钮,该按钮将在计算后读取值并将其保存到我从 .NET 读取的文件中?有任何想法吗?

提前谢谢了

此致

标签: asp.netexcelexcel-formulaopenxmlopenxml-sdk

解决方案


推荐阅读