嗨,
我正在使用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;
你知道为什么我没有得到更新的值吗?
由于
问候。
何
答案 0 :(得分:2)
对包含公式的每个单元格执行以下函数。
public void ReCalcuateFormula(Cell cell)
{
if (cell.CellFormula != null)
cell.CellFormula.CalculateCell = new BooleanValue(true);
}
答案 1 :(得分:1)
见文森特的回答: OpenXML - refresh Excel sheet after cell update
Open XML SDK不会刷新公式的计算结果。只要 Excel做到了(或其他电子表格软件)。即使你设定了 ForceFullCalculation和FullCalculationOnLoad为true,你只知道 Excel强制进行完整计算并在加载时执行 电子表格文件。
这就是为什么你总是得到“旧的”价值。因为没有“新” 值得一提。
要测试这个,你可以设置CellValue(Cell类) “3.14159”,CellFormula完好无损。 Excel将计算和 显示您的公式的正确值,即使您 具体设置单元格值为“3.14159”。 [当然除非你的 公式评估为PI ...]
要解决此问题,您要么有一个计算引擎来读取 公式并为您计算结果。或者保存电子表格和 运行Excel(在Interop模式下)来计算所有公式,但是 有点打败了首先使用Open XML SDK的目的。