【问题标题】:Closed XML change entire row background color based on cell value关闭的 XML 根据单元格值更改整行背景颜色
【发布时间】:2018-03-23 14:28:39
【问题描述】:

我正在尝试根据单元格选择(值)为整行着色。我只想为我的工作表中使用的范围而不是未使用的单元格更改行的颜色。

这是我现在拥有的代码:

class Program
{
    static void Main(string[] args)
    {
        CreateWorkbook();
    }

    static void CreateWorkbook()
    {
        var workbook = new XLWorkbook();
        var ws1 = workbook.AddWorksheet("Main");
        var ws2 = workbook.AddWorksheet("ListOfOptions");

        var listOfStrings = new List<String>();
        listOfStrings.Add(" ");
        listOfStrings.Add("Edit");
        listOfStrings.Add("Delete");

        ws2.Cell(2,2).InsertData(listOfStrings);
        workbook.Worksheet(1).Column(3).SetDataValidation().List(ws2.Range("B2:B4"), true);

        var list = new List<Person>();
        list.Add(new Person() { Name = "John", Age = 30, Action = " " });
        list.Add(new Person() { Name = "Mary", Age = 15, Action = " " });
        list.Add(new Person() { Name = "Luis", Age = 21, Action = " " });
        list.Add(new Person() { Name = "Henry", Age = 45, Action = " " });

        ws1.Cell(1, 1).InsertData(list.AsEnumerable());

        ws1.RangeUsed().AddConditionalFormat().WhenContains("Edit")
            .Fill.SetBackgroundColor(XLColor.Yellow);
        ws1.RangeUsed().AddConditionalFormat().WhenContains("Delete")
            .Fill.SetBackgroundColor(XLColor.Red);

        ws2.Hide(); 
        workbook.SaveAs("DemoWorkbook.xlsx");
    }

    class Person
    {
        public string Name { get; set; }
        public int Age { get; set; }
        public string Action { get; set; }
    }
}

结果是这样的: See excel screenshot

【问题讨论】:

  • ClosedXML 只能对单元格本身应用条件格式。
  • 正如 Raidri 所提到的,问题在于您的样式被应用于包含编辑或删除的单元格,而不是它们的行。即使您这样做 ws1.Rows().ForEach(r =&gt; r.AsRange().AddConditionalFormat(). WhenContains("Edit").Fill.SetBackgroundColor( XLColor.Yellow)); 仍然只对包含已使用范围内这些单词的所有单元格应用颜色。

标签: c# excel closedxml


【解决方案1】:

使用 VB.NET -

            Dim nonEmptyDataRows = ws.RowsUsed
            For Each dataRow In nonEmptyDataRows
                Dim cell As String = dataRow.Cell(29).Value
                If cell = "0" Then
                    dataRow.Style.Fill.BackgroundColor = XLColor.Yellow
                ElseIf cell = "1" Then
                    dataRow.Style.Fill.BackgroundColor = XLColor.Green
                End If
            Next

【讨论】:

  • 问题不在于 VB.NET。
猜你喜欢
  • 1970-01-01
  • 2014-09-30
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
  • 2020-06-02
  • 2021-03-23
  • 2011-09-28
  • 2011-12-23
相关资源
最近更新 更多