/// <summary> /// Merges all cells that have been marked to be merged in the cellinfos dictionary. /// </summary> /// <param name="worksheet">The worksheet.</param> /// <param name="totalRowCount">The total number of rows in the worksheet.</param> /// <param name="totalColCount">The total number of columns in the worksheet.</param> /// <param name="cellInfos">A dictionary of cell information, keyed by row and column index.</param> private static void MergeCells(OpenXmlSpreadsheet.Worksheet worksheet, uint totalRowCount, uint totalColCount, LayeredCellsDictionary cellInfos) { OpenXmlSpreadsheet.SheetData sheetData = worksheet.GetFirstChild <OpenXmlSpreadsheet.SheetData>(); // Process the collection of merged cells. for (uint worksheetRow = 1; worksheetRow <= totalRowCount; worksheetRow++) { for (uint worksheetCol = 1; worksheetCol <= totalColCount; worksheetCol++) { // Get cellInfo, if it has a MergeTo then merge it. var currentCoOrdinate = new System.Drawing.Point((int)worksheetCol, (int)worksheetRow); ExcelCellInfo cellInfo = cellInfos[currentCoOrdinate].CellInfo; if (cellInfo.MergeTo != null) { sheetData.MergeCells(cellInfo.Cell, cellInfo.MergeTo.Cell); } } } }