我有一个阅读&使用OpenXML SDK编写Excel(xlsx)单元格。该课程基于此处投票最多的答案:Open XML SDK 2.0 - how to update a cell in a spreadsheet?
我需要更新一个单元格,然后获取另一个单元格的值,其中包含一个计算公式。更新工作正常,但是当我在更新后读取公式单元格时,我得到旧的值,在编辑之前存在于doc中。但是,当我在运行程序后手动打开我的xlsx时,我可以看到正确的值。
所以看起来像单元格的旧值被缓存到某个地方......这很奇怪,因为我每次在读/写单元格之前打开/关闭我的文档。
编辑: Vincent的回答让我更新了我的示例代码。我添加了一个Refresh方法,可以在后台运行的Excel应用程序中打开,保存和关闭文档。这会重新计算我的公式。 有关详细信息和C#代码示例,请参阅:http://fczaja.blogspot.com/2013/05/how-to-read-and-write-excel-cells-with.html
答案 0 :(得分:7)
Open XML SDK不会刷新公式的计算结果。只有Excel(或其他电子表格软件)。因此,即使您将ForceFullCalculation和FullCalculationOnLoad设置为true,您也只能告诉Excel强制进行完整计算并在加载电子表格文件时执行此操作。
这就是为什么你总是得到“旧的”价值。因为没有“新”价值可言。
要测试这一点,您可以将CellValula(Cell类)设置为“3.14159”,CellFormula保持不变。即使您专门将单元格值设置为“3.14159”,Excel也会计算并显示公式的正确值。 [当然,除非您的公式评估为PI ...]
要解决此问题,您可以使用计算引擎读取公式并为您计算结果。或者保存电子表格并运行Excel(在Interop模式下)来计算所有公式,但这样做首先打败了使用Open XML SDK的目的。