2017-12-26 4 views
0

Ich hatte kein Glück Zeilen in Excel zu löschen, so jetzt ich versuche, ihren Inhalt zu löschen und immer noch den Fehler: "kann nicht löschen/überschreiben verschmolzen Zellen. Ein Bereich ist teilweise mit der verschmolzen ein weiterer zusammengelegter Bereich. A57788: J57788 ".Unmerge und löschen Zellen in epplus 4.1

Die Spalten 1-10 sind wirklich zusammengeführt, aber wie kann ich sie zusammenfügen?

mein Code hier:

cntr = 0; 
while (ws.Cells[RowNum + cntr, 1].Value == null || !ws.Cells[RowNum + cntr, 1].Value.ToString().StartsWith("Report generation date")) 
{ 
    ws.Cells[RowNum + cntr, 1, RowNum + cntr, 18].Value = ""; 
    ws.Cells[RowNum + cntr, 1, RowNum + cntr, 10].Merge = false; 
    for (int i = 1; i < 17; i++) 
    { 
     ws.Cells[RowNum + cntr, i].Style.Border.BorderAround(OfficeOpenXml.Style.ExcelBorderStyle.None); 
     ws.Cells[RowNum + cntr, i].Clear(); 
    } 
    cntr++; 
} 
//ws.DeleteRow(RowNum, cntr); 

Antwort

1

Die Sache ist, dass Sie nicht eine einzelne Zelle in einem Bereich unmerge können, haben Sie die ganze Palette an unmerge.

zu tun, dass Sie die fusionierten Bereich bekommen kann, dass eine Zelle meine Lösung mit here gehört:

public string GetMergedRange(ExcelWorksheet worksheet, string cellAddress) 
    { 
     ExcelWorksheet.MergeCellsCollection mergedCells = worksheet.MergedCells; 
     foreach (var merged in mergedCells) 
     { 
      ExcelRange range = worksheet.Cells[merged]; 
      ExcelCellAddress cell = new ExcelCellAddress(cellAddress); 
      if (range.Start.Row<=cell.Row && range.Start.Column <= cell.Column) 
      { 
       if (range.End.Row >= cell.Row && range.End.Column >= cell.Column) 
       { 
        return merged.ToString(); 
       } 
      } 
     } 
     return ""; 
    } 

Der zweite Schritt das gesamte Spektrum wird unmerge mit: wird

public void DeleteCell(ExcelWorksheet worksheet, string cellAddress) 
    { 
     if (worksheet.Cells[cellAddress].Merge == true) 
     { 
      string range = GetMergedRange(worksheet, cellAddress); //get range of merged cells 
      worksheet.Cells[range].Merge = false; //unmerge range 
      worksheet.Cells[cellAddress].Clear(); //clear value 
     } 
    } 

Auf diese Weise kostet Sie das Verschmelzen der anderen Zellen zu verlieren, und ihr Wert, um dies zu überwinden, können Sie Wert vor dem Löschen und Entbündeln dann können Sie es zurückschreiben, etwas wie:

public void DeleteCell(ExcelWorksheet worksheet, string cellAddress) 
    { 
     if (worksheet.Cells[cellAddress].Merge == true) 
     { 
      var value = worksheet.Cells[cellAddress].Value; 
      string range = GetMergedRange(worksheet, cellAddress); //get range of merged cells 
      worksheet.Cells[range].Merge = false; //unmerge range 
      worksheet.Cells[cellAddress].Clear(); //clear value 
      //merge the cells you want again. 
      //fill the value in cells again 
     } 
    } 
+0

GetMergedRange funktioniert nicht für Bereiche, daher funktioniert die DeleteCell-Methode nicht: Ungültiges Adressformat C6: E6 – Vadim

+0

Das Übernehmen von Bereichen führt zu großen Herausforderungen, da der Bereich Zellen enthalten kann, die zu mehr als einem zusammengeführten Bereich gehören Ein solcher Fall oder der übergebene Bereich gehört nur zu einem zusammengelegten Bereich? –

Verwandte Themen