OpenSpreadsheet icon indicating copy to clipboard operation
OpenSpreadsheet copied to clipboard

[Feature] Conditional Formatting per C# Property (Column Span)

Open jzabroski opened this issue 3 years ago • 0 comments

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

jzabroski avatar Jan 18 '22 21:01 jzabroski