Pick up the latest source code, it exposes range.Merge(Boolean checkIntersects) which allows you to turn off a check to see if the new merge breaks another merge. If you know what you're doing (you know you're not intersecting merged ranges) then you don't need this.
I don't know about your real code but the example you gave does a whole lot of unnecessary steps. Here's the shorter version:
I don't know about your real code but the example you gave does a whole lot of unnecessary steps. Here's the shorter version:
int total = 5000;
var timer = System.Diagnostics.Stopwatch.StartNew();
using (XLWorkbook wb = new XLWorkbook(XLEventTracking.Disabled))
{
using (var ws = wb.AddWorksheet("MergeCellsWorksheet"))
{
// 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";
ws.Range("A" + i + ":B" + (i + 1)).Merge(false);
ws.Range("C" + i + ":C" + (i + 1)).Merge(false);
ws.Range("D" + i + ":E" + i).Merge(false);
ws.Range("D" + (i + 1) + ":E" + (i + 1)).Merge(false);
}
}
wb.SaveAs(@"c:\temp\saved.xlsx");
}
timer.Stop();
Console.WriteLine("Took {0}s", timer.Elapsed.TotalSeconds);
Console.WriteLine("Done");