C# XML SDK重新计算值

C# XML SDK重新计算值,c#,openxml,openxml-sdk,C#,Openxml,Openxml Sdk,我有一个excel文件和一段用公式更新某些单元格的代码 在保存文件之前,我设置了以下两个布尔属性: spreadSheet.WorkbookPart.Workbook.CalculationProperties.ForceFullCalculation = true; spreadSheet.WorkbookPart.Workbook.CalculationProperties.FullCalculationOnLoad = true; // Save the worksheet. worksh

我有一个excel文件和一段用公式更新某些单元格的代码

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

spreadSheet.WorkbookPart.Workbook.CalculationProperties.ForceFullCalculation = true;
spreadSheet.WorkbookPart.Workbook.CalculationProperties.FullCalculationOnLoad = true;
// Save the worksheet.
worksheetPart.Worksheet.Save();
保存文件后,我使用OpenXMLSDK再次打开它,但仍然得到旧的值。当我使用excel打开excel文件并保存它时,我可以看到新的值

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


谢谢。Jose。

如果您有缓存的值,则将使用这些值,并且不会重新计算这些值。尝试刷新缓存值,如以下代码段所示:

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());
 }
公共静态无效FlushCachedValue(电子表格文档文档)
{
doc.WorkbookPart.WorksheetParts
.SelectMany(part=>part.Worksheet.Elements())
.SelectMany(data=>data.Elements())
.SelectMany(行=>row.Elements())
.Where(cell=>cell.CellFormula!=null&&cell.CellValue!=null)
托利斯先生()
.ForEach(cell=>cell.CellValue.Remove());
}

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

如果您有缓存的值,则将使用这些值,并且不会重新计算这些值。尝试刷新缓存值,如以下代码段所示:

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());
 }
公共静态无效FlushCachedValue(电子表格文档文档)
{
doc.WorkbookPart.WorksheetParts
.SelectMany(part=>part.Worksheet.Elements())
.SelectMany(data=>data.Elements())
.SelectMany(行=>row.Elements())
.Where(cell=>cell.CellFormula!=null&&cell.CellValue!=null)
托利斯先生()
.ForEach(cell=>cell.CellValue.Remove());
}

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

它无法按预期工作。所有单元格值都变为空白。这对我来说很有用-你是说单元格值在Excel中显示为空白?或者在保存的文件中显示为空白?只有在Excel中加载工作簿后,才会重新计算它们。它无法按预期工作。所有单元格值都变为空白。这对我来说很有用-你是说单元格值在Excel中显示为空白?或者在保存的文件中显示为空白?只有在Excel中加载工作簿后,才会重新计算它们。