OpenXML – 更新单元格后刷新Excel工作表

我有一个使用OpenXML SDK读取和写入Excel(xlsx)单元的类。 该类基于从这里投票最多的答案: Open XML SDK 2.0 – 如何更新电子表格中的单元格?

我需要更新一个单元格,然后获取另一个单元格的值,其中包含一个计算公式。 更新工作正常,但是当我读取更新后的公式单元格时,我获得了编辑前存在于文档中的旧值。 但是,当我运行程序后手动打开我的xlsx时,可以看到正确的值。

所以看起来细胞的旧值被caching在某个地方……这很奇怪,因为我每次在读/写单元格之前打开/closures我的文档。

编辑:文森特的答案让我更新我的示例代码。 我添加了一个Refresh方法,打开,保存并closures在后台运行的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强制执行完整计算,并在加载电子表格文件时执行此操作。

这就是为什么你总是得到“旧”的价值。 因为没有什么“新”价值可言。

为了testing这个,你可以设置CellValue(Cell类)来说“3.14159”,CellFormula保持不变。 Excel将计算并显示公式的正确值,即使您专门将单元格值设置为“3.14159”。 [当然,除非你的公式评估为PI …]

要解决这个问题,你需要有一个计算引擎来读取公式,并为你计算结果。 或者保存电子表格并运行Excel(在Interop模式下)来计算所有的公式,但是这首先打败了使用Open XML SDK的目的。