C# 如何在EPPlus中加快大型工作表的单元格格式设置

C# 如何在EPPlus中加快大型工作表的单元格格式设置,c#,excel,epplus,C#,Excel,Epplus,我有一个C#数据处理应用程序,它使用EPPlus将最终结果写入excel表格。行的背景色将根据该行上的数据所表示的内容进行更改。时间从来都不是问题,因为我只处理下面的文件,下面是打开现有文件的代码 FileInfo AddressList = new FileInfo("c:\test\test.xlsx"); // Open and read the XlSX file. try { using (Exc

我有一个C#数据处理应用程序,它使用EPPlus将最终结果写入excel表格。行的背景色将根据该行上的数据所表示的内容进行更改。时间从来都不是问题,因为我只处理下面的文件,下面是打开现有文件的代码

        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];

如果使用命名样式,则在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

你可以拿一个空白的电子表格,用条件格式设置表格,这样你就可以着色了。保存它并将其用作模板。可以将其复制为新的输出文件。那么,当它写给你的时候,你就不必务实地去做coloring@MatthewD好主意,但是由于应用程序应该每天生成多个文件。。。不确定模板解决方案是否有效您可以将模板与exe一起放置。每次需要时都会复制它。然后打开、写入和保存。它一天可以生产数千辆。“没关系,”马修德说,“好吧,我明白你现在说的。。我试试看。非常感谢。现在我需要了解如何在Excel中进行条件格式设置lol@MatthewD刚刚尝试了您的方法,在复制模板后,EEPlus基本上覆盖了所有内容,条件格式也随之消失。它基本上是从一张没有格式的空工作表开始的。不知道如何锁定条件格式。字节数组和文件流可能正在执行此操作。。。如果您正在逐个单元格地编写工作表.Cells[“E”+lRow.ToString()].Value=“blah”,EPPlus可能不会干扰它,但速度会慢一些。@sparta93您是否尝试过在不执行var fill1的情况下应用格式,然后在其上设置属性。也许试着直接将它们应用到细胞上。还有,如果这只是一堆if语句。它将运行每个if来检查条件。如果你做了一个开关,我相信一旦它匹配它的情况下,它不会检查其余的。我相信这会帮助你提高速度greatly@sparta93是否有一种情况在95%的情况下是正确的?如果是这样的话,你可以把它放在If中,然后在剩下的条件中使用“else If”。这样一来,这些条件将首先受到影响,而其他条件将永远不会得到检查。
        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];
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