提问人:Leo08 提问时间:11/10/2023 最后编辑:Theodor ZouliasLeo08 更新时间:11/10/2023 访问量:17
使用 groupby 生成 Excel 和 groupby 记录总和的性能问题
Performance issue with generating Excel with groupby and sum of the groupby records
问:
在使用 closedXML 的 C# 中,我插入了带有 groupby 记录的表,并在每个 groupby 结果之后包含一行额外的行来对所有记录求和。这里的问题是对于最多 2k 的记录,性能还可以,但对于超过 7k 的记录,创建 Excel 需要 1.5 分钟。谁能建议我一个可扩展的代码? 我们是否有其他方法可以对特定列求和,这对性能的影响较小。 非常感谢您的建议。
var workbook = new XLWorkbook();
var worksheet = workbook.Worksheets.Add();
worksheet.ShowGridLines = false;
var dataList = dataSet.ToList(); //dataList retuns groupby response
if (dataList.Any())
{
var row = 3;
int column = 1;
var includeHeader = true;
DataTable headers = GetColumnHeaders();
worksheet.Cell(1, column).InsertTable(headers);// to include custom headers
row = row + 2;
foreach (var data in dataList)
{
var accName = (string)data.GetType().GetProperty("accountName").GetValue(data);
var dataModel = ((IEnumerable<object>)data.GetType().GetProperty("expList").GetValue(data)).ToList();
worksheet.Cell(row - 1, column).SetValue($"Billed To:{accName}").Style.Font.SetBold().Font.SetFontColor(XLColor.Black);
worksheet.Cell(row, column).InsertTable(dataModel).SetShowHeaderRow(false).SetShowColumnStripes(false);
int sumFrom, sumTo = 0;
sumFrom = row;
row = row + dataModel.Count + 1;
sumTo = row - 1;
worksheet.Row(row).Style.Font.SetBold().Font.SetFontColor(XLColor.Black);
worksheet.Cell(row, column).SetValue($"Total For: {accName}");
worksheet.Cell(row, 24).FormulaA1 = "SUM(X" + sumFrom + ":X" + sumTo + ")";
worksheet.Cell(row, 25).FormulaA1 = "SUM(Y" + sumFrom + ":Y" + sumTo + ")";
worksheet.Cell(row, 26).FormulaA1 = "SUM(Z" + sumFrom + ":Z" + sumTo + ")";
worksheet.Cell(row, 27).FormulaA1 = "SUM(AA" + sumFrom + ":AA" + sumTo + ")";
row = row + 2;
}
}
答: 暂无答案
评论