First off, after working with OpenOfficeXML for a while, I want to thank you for ClosedXML - it truly has made Excel document reading / writing a breeze.
All pandering aside, I could use some help with optimizing my code. I have a very large excel document with some complex formatting that I need programmatically generated. I have noticed some performance hits on merging ranges. I was hoping for some suggestions on this.
Here is some code that represents a small piece of what I am doing:
Help is VERY appreciated!
All pandering aside, I could use some help with optimizing my code. I have a very large excel document with some complex formatting that I need programmatically generated. I have noticed some performance hits on merging ranges. I was hoping for some suggestions on this.
Here is some code that represents a small piece of what I am doing:
var timer = System.Diagnostics.Stopwatch.StartNew();
using (XLWorkbook wb = new XLWorkbook(XLEventTracking.Disabled))
{
using (var ws = wb.AddWorksheet("MergeCellsWorksheet"))
{
int total = 5000;
// Insert rows first
ws.Row(total).InsertRowsAbove(total);
// Get Ranges
var merge1 = ws.Ranges("ZZ1:ZZ1");
var merge2 = ws.Ranges("ZZ2:ZZ2");
var merge3 = ws.Ranges("ZZ3:ZZ3");
var merge4 = ws.Ranges("ZZ4:ZZ4");
// Insert some values
for (int i = 1; i <= total; i+=2)
{
ws.Cell(i, 1).Value = "Merge Cell 1";
ws.Cell(i, 3).Value = "Merge Cell 2";
ws.Cell(i, 4).Value = "Merge Cell 3";
ws.Cell((i+1), 4).Value = "Merge Cell 4";
merge1.Add(ws.Range("A" + i + ":B" + (i + 1)));
merge2.Add(ws.Range("C" + i + ":C" + (i + 1)));
merge3.Add(ws.Range("D" + i + ":E" + i));
merge4.Add(ws.Range("D" + (i + 1) + ":E" + (i + 1)));
Console.Clear();
Console.Write(i);
}
// Attempt to merge all cells.
merge1.ForEach(x => x.Merge());
merge2.ForEach(x => x.Merge());
merge3.ForEach(x => x.Merge());
merge4.ForEach(x => x.Merge());
}
wb.SaveAs(@"C:\Test2.xlsm");
}
timer.Stop();
Console.WriteLine("Took {0}s", timer.Elapsed.TotalSeconds);
You can see it takes a while for this to execute.Help is VERY appreciated!