无法更改单元格背景颜色,C#中的EPPlus

时间:2017-09-13 20:52:13

标签: c# excel epplus

我试图验证一行中的单元格不是 null 。如果 null ,我想将单元格的背景颜色更改为 red 。在阅读了如何做之后,我想出了以下代码:

public int verifyImportFile(FileUpload fup)
    {
        int status = 0;
        //check if there is actually a file being uploaded
        if (fup.HasFile)
        {
            //load the uploaded file into the memorystream
            using (MemoryStream stream = new MemoryStream(fup.FileBytes))
            //Lets the server know to use the excel package
            using (ExcelPackage xlPackage = new ExcelPackage(stream))
            {
                //Gets the first worksheet in the workbook
                ExcelWorksheet worksheet = xlPackage.Workbook.Worksheets[1];
                //Gets the row count
                var rowCnt = worksheet.Dimension.End.Row;
                //Gets the column count
                var colCnt = worksheet.Dimension.End.Column;
                //Beginning the loop for data gathering
                for (int i = 2; i < rowCnt; i++) //Starts on 2 because excel starts at 1, and line 1 is headers
                {
                    //If there is no value in column 3, proceed
                    if (worksheet.Cells[i, 3].Value == null)
                    {
                        worksheet.Cells[i, 3].Style.Fill.PatternType = ExcelFillStyle.Solid;
                        worksheet.Cells[i,3].Style.Fill.BackgroundColor.SetColor(Color.Red);
                        status = 1;
                    }                        
                }
                xlPackage.Save();
            }               
        }
        return status;
    }

我从测试中知道的是,如果找到 null 值,它将进入检查 nulls 的if语句。似乎正在运行代码来更改背景颜色。在循环遍历整个Excel工作表后,变量 status 确实更改为1并显示在弹出窗口中。 根据我对如何操作的理解,它运行正常,但背景颜色保持白色。

2 个答案:

答案 0 :(得分:0)

希望这有效。 worksheet.Cells[i, 3].Interior.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Red)

答案 1 :(得分:0)

您的代码是正确的,只要设置背景颜色,假设它已被确认。

但你怎么实际保存文件?加载到MemoryStream后,切断与原始字节数组的连接。您需要执行SaveAs()GetAsByteArray()这样的调用:

xlPackage.SaveAs(new FileInfo(@"c:\temp\myFile.xls"));

调用Save()只是写入MemoryStream。