Concatenate cells in Excel using "Openxml writer"
I want to merge cells. Using a DOM approach, I can do this easily. But since my excel file is too big, when I try to get the sheet, it throws an out of memory exception. So I have to use SAX approach to read the excel file. But I don't know how to merge cells in this approach. Searched a lot, but each one gives a solution to the DOM approach.
Can anyone help, thanks in advance.
+3
source to share
2 answers
My solution: read all data from old sheet using openxmlreader than write to new sheet using openxmlwriter so that I can add the merge cell element after writing the data to the 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 to combine 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();
Recommendations:
0
source to share