2017-04-24 5 views
3

을 합병했다. 예를 들어,이 병합 세포 "A78 : C78". 내가삭제 행 바꿈이 행이 잘못 후 내가 어떤 행을 삭제 해요, 그리고 병합 된 셀의 주소 세포

worksheet.Cells[77,1] 

worksheet.DeleteRow(5) 

주소를 할 경우 "A77"입니다. 그러나

worksheet.MergedCells[77,1] 

은 null이지만 "A77 : C77"이어야합니다.

worksheet.Cells[78,1] 

주소는 "A78"입니다. 그러나

worksheet.MergedCells[78,1] 

은 "A77 : C77"이지만 null이어야합니다. 재미 있고 이상한 것은,이 병합 세포 "A77 : C77을"*의 .XLSX에 저장된 문서입니다. 이런 이유 나는 이해할 수 없다. 은 아마 어떻게 든 병합 된 셀의 정확한 주소에 대한 행을 삭제 한 후 시트를 업데이트 할 필요가있어?

답변

1

이 문제가 다시 mergedcell 주소를 얻기 전에 파일을 저장 오버라이드 (override)하는이 솔루션은, 당신이 제공하는 같은 예에서 다음 코드를 시도하고, 결과는 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(); 
     } 

나는 EPPLUS의 v4.1.1.0

을 사용했다