2017-04-24 7 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にする必要があります。 興味深いと奇妙なものは、* .xlsxに保存された文書にマージされたセル "A77:C77"があります。 これがなぜ起こるのか理解できません。 マージされたセルの正しいアドレスの行を削除した後、何らかの形でシートを更新する必要がありますか?

答えて

1

この問題を解決する解決策は、mergedcellアドレスを再度取得する前にファイルを保存することです。私が提供した同じ例で次のコードを試してみました。結果はpackage.Save()の後に正しいようです。私はEPPLUSのv4.1.1.0

を使用していた

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

関連する問題