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

How do I dynamically set the forecolour of my column data based on the value when exporting excel using EPPLUS?

我有一组代码可以使用 EPPLUS 将网格视图数据导出到 excel。我能够将数据导出到 EPPLUS。但是如何将字体的颜色也导出到 excel?我可以设置字体颜色的动态编码吗 if ..... color = green if ..... color = red?

因此我需要根据我设置的值对 column4 进行着色。

下面的代码是我如何为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();

        }

那么我该如何在导出代码中进行导出或在导出时动态设置前景色?

谢谢

这一行之后

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"));
    }
}