使用EPPLUS导出excel时,如何根据值动态设置列数据的前景色

本文关键字:设置 动态 数据 前景色 何根 导出 EPPLUS excel 使用 | 更新日期: 2023-09-27 18:19:27

我有一组代码可以使用EPPLUS将网格视图数据导出到excel。我可以将数据导出到EPPLUS。但是如何将字体的颜色导出为excel呢?如果…..,我可以设置字体颜色的动态编码吗。。。。。颜色=绿色,如果。。。。。color=红色?

因此,我需要根据我设置的值对第4列进行着色。

以下代码是我如何为gridview动态设置的:

            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                TableCell cell = e.Row.Cells[16];
                int Num = int.Parse(cell.Text);
                if (Num >= 1&& Num <= 11)
                {
                    cell.ForeColor = Color.Green;
                }
                if (Num >= 12&& Num <= 39)
                {
                    cell.ForeColor = Color.Orange;
                }
..........
        }

我的出口代码:

  protected void EXPORT_BUTTON_Click(object sender, EventArgs e)
        {
            ExcelPackage package = new ExcelPackage();
            ExcelWorksheet Grid = package.Workbook.Worksheets.Add("ORSA ASSESSMENTS"); 

            DataTable Gridview1 = new DataTable();
            for (int i = 0; i < Gridview1.Columns.Count; i++)
            {
                Gridview1.Columns.Add("column" + i.ToString());
            }
            foreach (GridViewRow row in Gridview1.Rows)
            {
                DataRow dr = Gridview1.NewRow();
                for (int j = 0; j < Gridview1.Columns.Count; j++)
                {
                    row.Cells[j].Text = row.Cells[j].Text.Replace("&nbsp;", " ");
                    dr["column" + j.ToString()] = row.Cells[j].Text;
                }
                Gridview1.Rows.Add(dr);
            }

            Grid.Cells["A1"].LoadFromDataTable(Gridview1, true);
            using (ExcelRange rng = Grid.Cells["A1:Z1"])
            {
                rng.Style.Font.Bold = true;
            }
            Grid.Cells[ORSA.Dimension.Address].AutoFitColumns();

                var FolderPath = ServerName + DirectoryLocation + DirectoryFolder + ExportsFolder;
                var filename = ExcelName + @"_"  + ".xlsx";
                var filepath = new FileInfo(Path.Combine(FolderPath, filename));
                Response.Clear();
                package.SaveAs(filepath);
                Response.AddHeader("content-disposition", "attachment; filename=" + filename + ";");
                Response.Charset = "";
                Response.ContentType = "application/vnd.xlsx";
                Response.TransmitFile(filepath.FullName);
                Response.End();
        }

因此,我如何在导出代码中进行操作,以便在导出时动态导出或设置前景?

感谢

使用EPPLUS导出excel时,如何根据值动态设置列数据的前景色

此行之后

Grid.Cells["A1"].LoadFromDataTable(Gridview1, true);

进行循环以循环DataTable 的计数

示例

protected void Page_Load(object sender, EventArgs e)
{
    // Check
    if (!IsPostBack)
    {
        DataTable dt = new DataTable();
        // Create Column
        for(int i = 0; i < 5; i++)
            dt.Columns.Add("column" + i, typeof(int));
        for (int i = 0; i < 10; i++)
            dt.Rows.Add(i, i+1, i+2, i+3, i+4);
        GenerateExcel(dt);
    }
}
private void GenerateExcel(DataTable dt)
{
    using (ExcelPackage pkg = new ExcelPackage())
    {
        ExcelWorksheet ws = pkg.Workbook.Worksheets.Add("Sheet1");
        int num = 0;
        string value = string.Empty;
        ws.Cells[1, 1].LoadFromDataTable(dt, true);
        // Get Your DataTable Count
        int count = dt.Rows.Count;
        int countCol = dt.Columns.Count;
        bool isHeader = true;

        for (int i = 0; i < count; i++ )
        {                
            // Set Border
            for (int j = 1; j <= countCol; j++)
            {
                // Set Border For Header. Run once only
                if (isHeader) ws.Cells[1, j].Style.Border.BorderAround(OfficeOpenXml.Style.ExcelBorderStyle.Thin, System.Drawing.Color.Black);
                ws.Cells[2 + i, j].Style.Border.BorderAround(OfficeOpenXml.Style.ExcelBorderStyle.Thin, System.Drawing.Color.Black);
            }
            // Set to false
            isHeader = false;
            // Cells 2 + i == Rows, Wondering start with 2 because your 1st rows is Title so 2 is the value
            // Cells 2 == Column make sure your column is fix
            value = ws.Cells[2 + i, 2].Value + ""; // You can use .ToString() if u sure is not null
            // Parse
            int.TryParse(value, out num);
            // Check
            if (num >= 1 && num <= 11)
                ws.Cells[2 + i, 2].Style.Font.Color.SetColor(System.Drawing.Color.Green);
            else if (num >= 12 && num <= 39)
                ws.Cells[2 + i, 2].Style.Font.Color.SetColor(System.Drawing.Color.Orange);
        }
        pkg.SaveAs(new FileInfo("C:''Test.xlsx"));
    }
}