单元更新后刷新Excel工作表
我有一个使用OpenXML SDK读取和写入Excel(xlsx)单元的类。 该类基于这里最受赞誉的答案:Open XML SDK 2.0 - 如何更新电子表格中的单元格?
我需要更新一个单元格,然后获取另一个单元格的值,其中包含一个计算公式。 更新可以正常工作,但是当我在更新后阅读公式单元格时,我会获得编辑前存在于文档中的旧值。 但是,当我在运行程序后手动打开我的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类的)为CellFormula完整的“3.14159”。 即使您专门将单元格值设置为“3.14159”,Excel也会计算并显示公式的正确值。 [当然,除非你的公式评估为PI ...]
要解决这个问题,您需要有一个计算引擎来读取公式并为您计算结果。 或者保存电子表格并运行Excel(在互操作模式下)来计算所有公式,但这种方式首先打败了使用Open XML SDK的目的。
链接地址: http://www.djcxy.com/p/27757.html