【发布时间】: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 => r.AsRange().AddConditionalFormat(). WhenContains("Edit").Fill.SetBackgroundColor( XLColor.Yellow));仍然只对包含已使用范围内这些单词的所有单元格应用颜色。