2017-12-26 10 views
0

Excel에서 행 삭제 행이 없었으므로 이제 내용을 지우고 오류가 발생합니다. "병합 된 셀을 삭제하거나 덮어 쓸 수 없습니다. 범위가 부분적으로 병합되었습니다. 다른 병합 범위 A57788 : J57788 ".epplus에서 셀 병합 취소 및 정리

열 1-10은 실제로 병합되지만 어떻게 병합합니까?

여기 내 코드입니다 :

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); 

답변

1

것은 당신이 범위에서 하나의 셀을 병합을 취소 할 수 있습니다, 당신은 모든 범위의 병합을 취소해야합니다.

은 세포 내 솔루션 here를 사용 속해있는 병합 된 범위를 얻을 수 수행합니다

두 번째 단계는 사용하여 전체 범위를 병합을 취소한다
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 ""; 
    } 

:

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 
     } 
    } 

것이다이 방법을 다른 셀의 병합 비용과 그 값을 극복하기 위해 비용을 절약하고 취소하기 전에 값을 저장할 수 있습니다. 다음과 같이 다시 쓸 수 있습니다.

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가 작동하지 않으므로 DeleteCell 메서드가 작동하지 않습니다. 유효하지 않은 주소 형식 C6 : E6 – Vadim

+0

범위를 허용하면 범위에 둘 이상의 병합 된 범위에 속한 셀이 포함될 수 있으므로 큰 문제가 발생합니다. 이러한 경우 또는 전달 된 범위는 하나의 병합 된 범위에만 속합니다. –