更新excel文件中的小计

我使用OpenXML库获取数据表并将其粘贴到预格式化的excel文件中。 这工作正常。

我遇到的问题是在预格式化的excel文件的顶部有一个小计行,它被设置为小计这个数据的每一列(所以每列的顶部都有一个小计)。 当我创build后打开excel文件时,这些值全部设置为0,插入数据表时它们没有更新。 如果突出显示这些小计单元格中的一个,然后按下回车键,则会更新并显示正确的值。

一旦用户打开下载的电子表格,什么是最简单的方法来获取这些值来更新并显示正确的值?

创build电子表格的代码:

MemoryStream memoryStream = SpreadsheetReader.StreamFromFile(TemplateDirectory + @"\" + "exceltTemplate.xlsx"); doc = SpreadsheetDocument.Open(memoryStream, true); worksheetPart = SpreadsheetReader.GetWorksheetPartByName(doc, currentSheetName); writer = new WorksheetWriter(doc, worksheetPart); cellName = "A8"; writer.PasteDataTable(reports.Tables[0], cellName); SpreadsheetWriter.Save(doc); 

OpenXML库不会重新计算公式的结果。 解决这个问题的一个方法是从小计单元格中删除值(不是公式)。 这导致Excel做一个自动重新计算。

这个链接更详细地解释它。 在页面的一半左右,你会看到下面的代码,这对于你的需求是重要的:

 // remove all values of cells with formulas on a sheet // so that Excel refreshes them upon Open public static void ClearAllValuesInSheet (SpreadsheetDocument spreadSheet, string sheetName) { WorksheetPart worksheetPart = GetWorksheetPartByName(spreadSheet, sheetName); foreach (Row row in worksheetPart.Worksheet. GetFirstChild().Elements()) { foreach (Cell cell in row.Elements()) { if (cell.CellFormula != null && cell.CellValue != null) { cell.CellValue.Remove(); } } } worksheetPart.Worksheet.Save(); } 

此代码将删除包含公式和值的所有单元格的值。 为了加快速度,您可以很容易地自定义它,只处理您的小计单元格。