I want to merge cells is excel. By using DOM approach I can do it easily. But as my excel file is too large, when I tries to get worksheet it throws Out of memory exception. So I have to use SAX approach to read excel file. But I dont know how to merge cells in this approach. Searched a lot but every one gives the solution of DOM approach.
Can anyone help, Thanks in advance.
You can do this using EPPlus :
using (ExcelPackage package = new ExcelPackage(new FileInfo(@"C:\Temp\example.xlsx")))
{
ExcelWorksheet ws = package.Workbook.Worksheets.First();
ws.Cells["A1:A2"].Merge = true;
package.Save();
}
My solution is: read the whole data from the old sheet by openxmlreader than write into new sheet by openxmlwriter, so I can add merge cell element after write data into sheetdata element.
using (SpreadsheetDocument myDoc = SpreadsheetDocument.Open(YourExcelfileName, true))
{
// Create reference of main Workbook part, which contains all reference.
WorkbookPart objworkbook = myDoc.WorkbookPart;
// pick up first worksheet
WorksheetPart objworksheet = objworkbook.WorksheetParts.First();
// will be used in end while creating sheet data
string objorigninalSheetId = objworkbook.GetIdOfPart(objworksheet);
WorksheetPart objreplacementPart = objworkbook.AddNewPart<WorksheetPart>();
string objreplacementPartId = objworkbook.GetIdOfPart(objreplacementPart);
Sheets sheets = objworkbook.Workbook.Sheets;
Sheet sheet = new Sheet() { Id = workbookPart.GetIdOfPart(objreplacementPart), SheetId = 2, Name = "Sheet" };
sheets.Append(sheet);
// Create object reader to read from excel file.
OpenXmlReader objreader = OpenXmlReader.Create(objworksheet);
// create writer object to write in excel sheet.
OpenXmlWriter objOpenXmwriter = OpenXmlWriter.Create(objreplacementPart);
objOpenXmwriter.WriteStartElement(new Worksheet());
objOpenXmwriter.WriteStartElement(new SheetData());
while (objreader.Read())
{
//read the context of original sheetdata.
//then put all data to new sheetdata by openxmlwriter
}
// this is for Sheetdata
objOpenXmwriter.WriteEndElement();
//* after Sheetdata you can merge cells by openxmlwriter like that:
objOpenXmwriter.WriteStartElement(new MergeCells());
objOpenXmwriter.WriteElement(new MergeCell() { Reference = "P1:Q1" });
objOpenXmwriter.WriteElement(new MergeCell() { Reference = "R1:S1" });
objOpenXmwriter.WriteEndElement();
// this is for Worksheet
objOpenXmwriter.WriteEndElement();
//close all objects
objreader.Close();
objOpenXmwriter.Close();
Sheet sheetreplace = objworkbook.Workbook.Descendants<Sheet>().Where(s => s.Id.Value.Equals(objorigninalSheetId)).First();
sheetreplace.Id.Value = objreplacementPartId;
objworkbook.DeletePart(objworksheet);
}
The way of merge cells in Excel using Openxml writer is below:
objOpenXmwriter.WriteStartElement(new MergeCells());
objOpenXmwriter.WriteElement(new MergeCell() { Reference = "P1:Q1" });
objOpenXmwriter.WriteElement(new MergeCell() { Reference = "R1:S1" });
objOpenXmwriter.WriteEndElement();
References:
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.