使用 groupby 生成 Excel 和 groupby 记录总和的性能问题

Performance issue with generating Excel with groupby and sum of the groupby records

提问人:Leo08 提问时间:11/10/2023 最后编辑:Theodor ZouliasLeo08 更新时间:11/10/2023 访问量:17

问:

在使用 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;
    }
}
C# Excel 性能 .Net-Core ClosedXML

评论


答: 暂无答案