【问题标题】:XML SDK recalculate valuesXML SDK 重新计算值
【发布时间】:2012-11-01 18:57:30
【问题描述】:

我有一个 excel 文件,我有一段代码可以用公式更新一些单元格。

在保存文件之前,我设置了这两个布尔属性:

spreadSheet.WorkbookPart.Workbook.CalculationProperties.ForceFullCalculation = true;
spreadSheet.WorkbookPart.Workbook.CalculationProperties.FullCalculationOnLoad = true;
// Save the worksheet.
worksheetPart.Worksheet.Save();

保存文件后,我使用 Open XML SDK 再次打开它,但我仍然得到旧值。当我使用 Excel 打开 Excel 文件并保存它时,我可以看到新值。

你知道我可以如何重新计算这些值吗?如果我保存文件,我希望如果我打开它,应该重新计算值。

谢谢。何塞。

【问题讨论】:

    标签: c# openxml openxml-sdk


    【解决方案1】:

    如果您有缓存值,则将使用这些值并且不会重新计算这些值。尝试像在这个 sn-p 中那样刷新缓存的值:

    public static void FlushCachedValues(SpreadsheetDocument doc)
    {
       doc.WorkbookPart.WorksheetParts
          .SelectMany(part => part.Worksheet.Elements<SheetData>())
          .SelectMany(data => data.Elements<Row>())
          .SelectMany(row => row.Elements<Cell>())
          .Where(cell => cell.CellFormula != null && cell.CellValue != null)
          .ToList()
          .ForEach(cell => cell.CellValue.Remove());
     }
    

    请确保在保存文档之前调用此方法。

    【讨论】:

    • 它没有按预期工作。所有 CellValues 变为空白。
    • 它对我有用 - 你是说 CellValues 在 Excel 中显示为空白吗?还是在您保存的文件中显示为空白?只有在 Excel 中加载工作簿后才会重新计算它们。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-06
    • 2011-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多