Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 闭合XML基于单元格值更改整行背景颜色_C#_Excel_Closedxml - Fatal编程技术网

C# 闭合XML基于单元格值更改整行背景颜色

C# 闭合XML基于单元格值更改整行背景颜色,c#,excel,closedxml,C#,Excel,Closedxml,我正在尝试根据单元格选择(值)为整行着色。我只想更改工作表中已使用区域的行颜色,但不想更改未使用单元格的行颜色 以下是我现在掌握的代码: class Program { static void Main(string[] args) { CreateWorkbook(); } static void CreateWorkbook() { var workbook = new XLWorkbook(); va

我正在尝试根据单元格选择(值)为整行着色。我只想更改工作表中已使用区域的行颜色,但不想更改未使用单元格的行颜色

以下是我现在掌握的代码:

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; }
    }
}
类程序
{
静态void Main(字符串[]参数)
{
创建工作簿();
}
静态void create工作簿()
{
var工作簿=新的XLWorkbook();
var ws1=workbook.AddWorksheet(“Main”);
var ws2=workbook.AddWorksheet(“选项列表”);
var listOfStrings=new List();
listOfStrings.Add(“”);
添加(“编辑”);
添加(“删除”);
细胞(2,2).InsertData(listOfStrings);
工作簿。工作表(1)。列(3)。SetDataValidation()。列表(ws2.Range(“B2:B4”),true);
var list=新列表();
添加(newperson(){Name=“John”,年龄=30,Action=”“});
添加(newperson(){Name=“Mary”,年龄=15,Action=”“});
添加(newperson(){Name=“Luis”,年龄=21,Action=”“});
添加(newperson(){Name=“Henry”,年龄=45,Action=”“});
Cell(1,1).InsertData(list.AsEnumerable());
ws1.RangeUsed().AddConditionalFormat().WhenContains(“编辑”)
.Fill.SetBackgroundColor(XLColor.Yellow);
ws1.RangeUsed().AddConditionalFormat().WhenContains(“删除”)
.Fill.SetBackgroundColor(XLColor.Red);
ws2.Hide();
workbook.SaveAs(“DemoWorkbook.xlsx”);
}
班主任
{
公共字符串名称{get;set;}
公共整数{get;set;}
公共字符串操作{get;set;}
}
}
结果是:

使用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

ClosedXML只能为单元格本身应用条件格式。正如Raidri所提到的,问题是您的样式应用于包含“编辑”或“删除”的单元格,而不是它们的行。即使您执行
ws1.Rows().ForEach(r=>r.AsRange().AddConditionalFormat().when包含(“编辑”).Fill.SetBackgroundColor(XLColor.Yellow))
仍然只对包含所用范围内的单词的所有单元格应用颜色。问题不是关于VB.NET的。