OpenSpreadsheet
OpenSpreadsheet copied to clipboard
[Feature] Conditional Formatting per C# Property (Column Span)
I currently have Aspose.Cells code that looks something nasty, like this DataTable code:
private void CreateSpreadSheet(DataTable dtValue, string reportPath)
{
using (var ew = Office.OfficeServiceFactory.GetExcelWriter())
{
const string sheetName = "Sheet1";
ew.AddWorkSheet(sheetName);
ew.WriteDataTable(dtValue, sheetName, "A1");
ew.FreezeAndAutoFilterFirstRow(sheetName);
ew.SetRowStyle(sheetName, 0, true, true);
ew.SetCellRangeStyle(sheetName, $"B2:K{dtValue.Rows.Count + 2}", "#,##0");
ew.SetCellRangeStyle(sheetName, $"O2:O{dtValue.Rows.Count + 2}", "#,##0");
ew.SetCellRangeStyle(sheetName, $"P2:P{dtValue.Rows.Count + 2}", "0.00%");
ew.AutoFitColumns(sheetName);
for (var i = 0; i < dtValue.Rows.Count; i++)
{
var row = dtValue.Rows[i];
if (_greaterThanTenPercent(row))
{
ew.SetBackgroundColor(sheetName, "A" + (i + 2) + ":Q" + (i + 2), Color.Yellow);
}
}
ew.FreezePanes(sheetName, 1, 1, 0, 1);
using (var stream = new FileStream(reportPath, FileMode.Create))
{
ew.Save(stream);
}
}
}
It would be awesome if I could just write:
MyDataClassMap()
{
References<ComplexPropertyClassMap>(m => m.ComplexProperty);
}
and then the ComplexPropertyClassMap would look something like this:
ComplexPropertyClassMap()
{
Map(m => m.SomeDouble).FormatNumber();
Map(m => m.SomeOtherDouble).ConditionalFormat(m => m > 0.1, cell => cell.BackgroundColor = BackgroundColor.Red).FormatPercent();
}