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