我使用EPPlus生成与验证和条件格式Excel文档。 我要检查文本的长度在一个细胞,并用颜色填充它,如果它超过规定长度。 我想这对整列来完成。
var address = new ExcelAddress("$A:$A");
var condition = workSheet.ConditionalFormatting.AddExpression(address);
condition.Formula = "=IF(LEN(A1)>25, TRUE, FALSE)";
condition.Style.Fill.PatternType = OfficeOpenXml.Style.ExcelFillStyle.Solid;
condition.Style.Fill.BackgroundColor.Color = Color.Green;
当我打开生成的Excel电子表格则显示错误信息,询问恢复数据。
当我测试了这个
using (var app = new ExcelPackage())
{
var workSheet = app.Workbook.Worksheets.Add("asdf");
var address = new ExcelAddress("$A:$A");
var condition = workSheet.ConditionalFormatting.AddExpression(address);
workSheet.Cells["A1"].Value = "asdfasdfasdfasdfasdfasfdasd";
condition.Formula = "=IF(LEN(A1)>25, TRUE, FALSE)";
condition.Style.Fill.PatternType = OfficeOpenXml.Style.ExcelFillStyle.Solid;
condition.Style.Fill.BackgroundColor.Color = System.Drawing.Color.Green;
var destinationPath = @"../../GeneratedExcelFile.xlsx";
File.WriteAllBytes(destinationPath, app.GetAsByteArray());
}
它没有引起任何错误,所以我认为这个问题是不是你提供的代码以外的原因
这是一种全新的方式将条件格式:您可以使用LINQ来检索根据你的条件的单元格地址。 只需确保在您的列表中添加属性,用于存储Excel的行号(iRow在下面)。
string sRng = string.Join(",", YourModel.Where(l => l.YourColumn.Length > 25)
.Select(a => "A" + a.iRow)); // this address could be many pages and it works
if (sRng.Length > 0) {
ws.Cells[sRng].Style.Fill.BackgroundColor.SetColor(System.Drawing.Color.Green);
}
这种做法是快如闪电,更灵活,不像条件格式不牺牲性能的Excel。 以下是文章全文:
https://www.codeproject.com/Tips/1231992/Conditional-Formatting-in-Excel-with-LINQ-and-EPPl
什么好的EPPlus我没有看到在限制范围内的地址 - 在一个字符串你可以通过约15000的地址 - 20,000细胞瞬间格式化所有的人。 唯一的缺点,它不会是动态的用户数据和玩想看看如何格式变化(如在Excel条件格式)。