asp.net - 有没有办法使用 .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();
- 使用正常方式获取 cellValue 或将其作为 SharedString 获取,例如如下:
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 读取的文件中?有任何想法吗?
提前谢谢了
此致