使用EPPLUS导出excel时,如何根据该值动态设置列数据的前景色? [英] How do I dynamically set the forecolour of my column data based on the value when exporting excel using EPPLUS?

查看:85
本文介绍了使用EPPLUS导出excel时,如何根据该值动态设置列数据的前景色?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I have a set of codes to export grid view data to excel using EPPLUS. I am able to export the data to EPPLUS. But how do I export the colour of the font to excel as well? Can I set the dynamic coding for the font colour if ..... colour = green if ..... colour = red?

因此,我还将需要根据我设置的值对column4进行着色.

Thus I will need column4 to be coloured as well according to the value I set.

以下代码是我为gridview动态设置的方式:

The below codes is how I set dynamically for 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();

        }

如何在导出代码中执行操作,以便可以在导出时动态导出或设置前景色?

Thus how can I do in my export codes so that I can export or set the forecolour dynamically upon exporting?

谢谢

推荐答案

此行之后

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

这篇关于使用EPPLUS导出excel时,如何根据该值动态设置列数据的前景色?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆