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的。