整列EPPlus条件格式字符串长度(EPPlus Conditional Formatting St

2019-09-25 15:26发布

我使用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电子表格则显示错误信息,询问恢复数据。

Answer 1:

当我测试了这个

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());
}

它没有引起任何错误,所以我认为这个问题是不是你提供的代码以外的原因



Answer 2:

这是一种全新的方式将条件格式:您可以使用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条件格式)。



文章来源: EPPlus Conditional Formatting String Length of Entire Column