如何在EPPlus中为大型工作表更快地进行单元格格式化

本文关键字:格式化 单元格 工作 EPPlus 大型 | 更新日期: 2023-09-27 18:01:22

我有一个c#数据处理应用程序,它使用EPPlus将最终结果写入excel表格。行背景颜色会根据该行数据的含义而改变。时间从来都不是问题,因为我以前只处理小于100MB的文件。然而,随着我的需求改变和文件变大,我注意到……只是着色使我的应用程序慢了60%。去除着色使应用程序明显更快。下面的代码片段是我用来给数据上色以使其在视觉上有区别的代码示例。我不是EPPlus方面的专家,但是有没有一种方法可以优化它,使我的应用程序更快?或者有没有更好的方法让这些行在视觉上更清晰让最终查看数据的人更清楚?任何帮助将不胜感激!

    if (data[4] == "3")
                                {
                                    // color the type 3 messages here
                                    var fill1 = cell1.Style.Fill;
                                    fill1.PatternType = ExcelFillStyle.Solid;
                                    fill1.BackgroundColor.SetColor(Color.LightGray);
}
                                if (data[4] == "4")
                                {
                                    var fill1 = cell1.Style.Fill;
                                    fill1.PatternType = ExcelFillStyle.Solid;
                                    fill1.BackgroundColor.SetColor(Color.BlanchedAlmond);
                                }
编辑:

这是我用来复制模板并将excel数据写入新工作表的代码。p是一个Excel包,我在写入Excel文件之前将其转换为字节数组。

        Byte[] bin = p.GetAsByteArray();
        File.Copy("C:''Users''mpas''Desktop''template.xlsx", "C:''Users''mpas''Desktop''result.xlsx");
        using (FileStream fs = File.OpenWrite("C:''Users''mpas''Desktop''result.xlsx")) { 
        fs.Write(bin, 0, bin.Length);
        }

如何在EPPlus中为大型工作表更快地进行单元格格式化

如果使用命名样式,在EPPlus和大多数Excel api中样式化要快得多。在EPPlus中为单元格指定并使用样式,如下所示:

internal static string YourStyleName = "MyStyle";
ExcelNamedStyleXml yourStyle = excel.Workbook.Styles.CreateNamedStyle(YourStyleName);
yourStyle.Style.Font.Color.SetColor(Color.DarkRed);
yourStyle.Style.Fill.PatternType = ExcelFillStyle.Solid;
yourStyle.Style.Fill.BackgroundColor.SetColor(Color.LemonChiffon);
// ...
sheet.Cells[sourceRange].StyleName = YourStyleStyleName

下面是打开现有文件的代码。

        FileInfo AddressList = new FileInfo("c:'test'test.xlsx");
        // Open and read the XlSX file.
        try
        {
            using (ExcelPackage package = new ExcelPackage(AddressList))
            {
                // Get the work book in the file
                ExcelWorkbook workBook = package.Workbook;
                if (workBook != null)
                {
                    if (workBook.Worksheets.Count > 0)
                    {
                        // Get the first worksheet
                        //ExcelWorksheet Worksheet = workBook.Worksheets.First();
                        var worksheet = package.Workbook.Worksheets[1];