Search code examples
c#mergedelete-roweppluscells

Deleting rows breaks merged cells


I'm delete some row, and address of merged cell after this row is wrong. For example, there are merged cells "A78:C78". If I do

worksheet.DeleteRow(5)

Address of

worksheet.Cells[77,1]

is "A77". But

worksheet.MergedCells[77,1]

is null, but it should be "A77:C77".

Address of

worksheet.Cells[78,1]

is "A78". But

worksheet.MergedCells[78,1]

is "A77:C77", but it should be null. What's interesting and strange, there are merged cells "A77:C77" in the saved document in *.xlsx. I can't understand why this happens. Maybe it's necessary to somehow update the sheet after deleting the rows for the correct address of merged cells?


Solution

  • The solution to override this issue is saving the file before getting mergedcell Address again, I have tried the following code on the same example you provided, and results seem to be correct after package.Save().

     using (var package = new ExcelPackage(new System.IO.FileInfo(filePath)))
            {
                ExcelWorksheet worksheet = package.Workbook.Worksheets[1];
                var address = worksheet.Cells[78, 1];//address is "A78"
                var mergedadress = worksheet.MergedCells[78, 1];//address is "A78:C78"
                worksheet.DeleteRow(5);
                address = worksheet.Cells[77, 1];//address is "A77"
                mergedaddress = worksheet.MergedCells[77, 1];//null
                address = worksheet.Cells[78, 1];//address is "A78"
                mergedaddress = worksheet.MergedCells[78, 1];//address is"A77:C77"
                package.Save();
            }
    
     using (var package = new ExcelPackage(new System.IO.FileInfo(filePath)))
            {
                ExcelWorksheet worksheet = package.Workbook.Worksheets[1];
                var address = worksheet.Cells[77, 1];//address is "A77"
                var mergedaddress = worksheet.MergedCells[77, 1];//Address is "A77:C77"
                address = worksheet.Cells[78, 1];//address is "A78"
                mergedaddress = worksheet.MergedCells[78, 1];//null
    
                package.Save();
            }
    

    I have used EPPLUS v4.1.1.0