更新单元格并保存excel后,基于此单元格的公式不会重新计算

嗨,

我使用XML SDK来更新Excel文件中的一些单元格。

这是即时通讯使用更新给定文本的单元格(及其工作正常)的代码。

WorksheetPart worksheetPart = GetWorksheetPartByName(spreadSheet, sheetname); spreadSheet.WorkbookPart.Workbook.CalculationProperties.ForceFullCalculation = true; spreadSheet.WorkbookPart.Workbook.CalculationProperties.FullCalculationOnLoad = true; if (worksheetPart != null) { Cell cell = GetCell(worksheetPart.Worksheet, columnName, rowIndex); cell.CellValue = new CellValue(text); cell.DataType = new EnumValue<CellValues>(CellValues.Number); // Save the worksheet. worksheetPart.Worksheet.Save(); } 

另一方面现在我想再次打开Excel文件,并从其他单元格的公式是基于前一个单元格,但即使是下面的行我无法做到更新值:

 spreadSheet.WorkbookPart.Workbook.CalculationProperties.ForceFullCalculation = true; spreadSheet.WorkbookPart.Workbook.CalculationProperties.FullCalculationOnLoad = true; 

你知道为什么我没有得到更新的价值?

谢谢

问候。

何塞

对包含公式的每个单元格执行下面的函数。

 public void ReCalcuateFormula(Cell cell) { if (cell.CellFormula != null) cell.CellFormula.CalculateCell = new BooleanValue(true); } 

看到文森特的答案在这里: OpenXML – 单元更新后刷新Excel工作表

Open XML SDK不会刷新公式的计算结果。 只有Excel(或其他电子表格软件)。 因此,即使您将ForceFullCalculation和FullCalculationOnLoad设置为true,您也只能告诉Excel强制执行完整计算,并在加载电子表格文件时执行此操作。

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

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

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