Sam*_*gan 2 .net asp.net excel openxml
我使用OpenXML库获取数据表并将其粘贴到预格式化的excel文件中.这很好用.
我遇到的问题是在预格式化的excel文件的顶部有一个小计行,它被设置为对该数据的每一列进行小计(因此在每列的顶部有一个小计).当我在创建excel文件后打开它时,这些值都设置为0,它们在插入数据表时没有更新.如果您突出显示其中一个小计单元格然后按Enter键,它将更新并显示正确的值.
一旦用户打开下载的电子表格,最简单的方法是让这些值更新并显示正确的值?
创建电子表格的代码:
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);
Run Code Online (Sandbox Code Playgroud)
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();
}
Run Code Online (Sandbox Code Playgroud)
此代码删除包含公式和值的所有单元格的值.为了加快速度,您可以非常轻松地对其进行自定义,以便处理小计单元格.
| 归档时间: |
|
| 查看次数: |
1039 次 |
| 最近记录: |