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

时间:2012-07-30 19:01:41

标签: c# excel openxml

嗨,

我正在使用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;

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

由于

问候。

2 个答案:

答案 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的目的。