Quantcast
Channel: ClosedXML - The easy way to OpenXML
Viewing all articles
Browse latest Browse all 1877

New Post: Cell Merge Performance

$
0
0
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:
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!

Viewing all articles
Browse latest Browse all 1877

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>