【问题标题】:In C#, how can I set the background color cell of exported Excel file to particular color based on some conditions?在 C# 中,如何根据某些条件将导出的 Excel 文件的背景颜色单元格设置为特定颜色?
【发布时间】:2019-11-14 06:59:46
【问题描述】:

我正在使用以下参考将数据插入 Excel。根据下面的代码,我想设置单元格颜色,其中还包含一些数据(如分数)

using ClosedXML.Excel.XLWorkbook;

XLWorkbook workbook;
workbook = new XLWorkbook(System.Web.Hosting.HostingEnvironment.MapPath("~/Template.xlsx"));
var worksheet = workbook.Worksheets.Worksheet(1);

foreach(var item in output)
{
    var cellname = ...... //  some codes to get cell name For exampple : it gets A5
    worksheet.Cell(cellname).SetValue(item.Score);

    // Now I need to set color for cell A5 (ie cellname) based on some condition
    // item will also contain parameter Color which will have color name like below

    if(item.Color == "Red")
        worksheet.Cell(cellname).SetColor(Red);     // I need proper code to be written in this line
    else if (item.Color == "Green")
        worksheet.Cell(cellname).SetColor(Green);  //

    // ............ some other codes .......
}

我正在使用ClosedXML,所以我需要可以使用此参考的代码。 此外,item.Color 是从 DB 接收的,因此它的值可以是红色、绿色或蓝色之间的任何值,因此我需要检查 item.Color 值并相应地设置单元格颜色。

【问题讨论】:

    标签: c# excel closedxml


    【解决方案1】:

    我想您能做的最好的事情就是在 Excel 文件本身中添加条件格式。这样,Excel 将应用颜色,即使在您生成文件后值发生变化时也会这样做。这在this part of the documentation 中有描述:

    var workbook = new XLWorkbook();
    var ws = workbook.AddWorksheet("Sheet1");
    
    ws.FirstCell().SetValue(1)
      .CellBelow().SetValue(1)
      .CellBelow().SetValue(2)
      .CellBelow().SetValue(3)
      .CellBelow().SetValue(4);
    
    ws.RangeUsed().AddConditionalFormat().WhenBetween(2, 3)
      .Fill.SetBackgroundColor(XLColor.Red);
    

    再次设置文本或填充颜色,您可以查看fill colorfont 的文档:

    var workbook = new XLWorkbook();
    var ws = workbook.Worksheets.Add("Style Fill");
    
    var co = 2;
    var ro = 1;
    
    ws.Cell(++ro, co + 1).Value = "BackgroundColor = Red";
    ws.Cell(ro, co).Style.Fill.BackgroundColor = XLColor.Red;
    
    ws.Cell(++ro, co + 1).Value = "PatternType = DarkTrellis; PatternColor = Orange; PatternBackgroundColor = Blue";
    ws.Cell(ro, co).Style.Fill.PatternType = XLFillPatternValues.DarkTrellis;
    ws.Cell(ro, co).Style.Fill.PatternColor = XLColor.Orange;
    ws.Cell(ro, co).Style.Fill.PatternBackgroundColor = XLColor.Blue;
    
    workbook.SaveAs(Styles_Fill);
    

    一般来说,documentation 看起来确实相当全面和有用。

    【讨论】:

    • 谢谢,但这不能满足我的要求。我从数据库中获取 item.Color 值。因此我需要使用这样的东西: if(item.Color == "Red") worksheet.Cell(cellname).SetColor(Red);如我的问题所述
    • @Amrit:那么使用第二种方法?您需要在颜色字符串和 ClosedXml 使用的常量/对象之间进行映射,但这可能是意料之中的。
    • @Amrit 是的,使用条件格式。此外,您可以使用XLColor.FromName 来推断颜色对象,例如XLColor.FromName("Red")。我还想敦促您通读 ClosedXML 文档。它将回答您在学习 ClosedXML 时会遇到的许多问题。
    猜你喜欢
    • 2022-01-23
    • 1970-01-01
    • 2017-01-21
    • 1970-01-01
    • 2015-04-21
    • 1970-01-01
    • 2011-04-03
    • 1970-01-01
    • 2017-03-26
    相关资源
    最近更新 更多