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