2017-09-27 94 views
2

h3110 3v3ry0n3、特にEPPlusチーム!EPPlus - DeleteRow後に行をシフト

私はこのようなExcelテンプレートがあります。

_______________________________ 
| Title 1 | Title 2 | 
|_______________|_______________| 
| %Placeholder% | %Placeholder% | 
|_______________|_______________| 
| Special cell | Special cell | 
|_______________|_______________| 

特別セル - いくつかのデータの検証とデータリストと空のセルを。 (特殊な細胞でリストを選択することで)手で充填する

  • がデータで満たされるように、プログラム(%placeholder%sを置き換える)、または
  • ので、このテンプレートは、二重の目的を持っています

    2番目のケースでは、私はsheet.DeleteRow(1)を呼び出し、特別な行#3が行#2(シフトアップ)になることを期待していますが、これは起こりません。だから、質問は:これはバグです、私は問題を投稿するか、行をシフトアップするためのいくつかの回避策がありますか?

    ここにいくつかの考えがあります。おそらく、これは特別な細胞を空にすることによって引き起こされる可能性があります。行3から行2にデータのバリデーションをコピーする方法がありますか?また、より一般的なケースについては、別の同様の質問C# ExcelPackage (EPPlus) DeleteRow does not change sheet dimension?があり、削除された行に空白行が続くようには見えません。

答えて

2

既知の問題であるようです。あなたがソースコード

https://epplus.codeplex.com/SourceControl/latest#EPPlus/ExcelWorkbook.csにExcelWorksheet.csの現在のバージョンを見れば:

#region DeleteRow 
/// <summary> 
/// Delete the specified row from the worksheet. 
/// </summary> 
/// <param name="row">A row to be deleted</param> 
public void DeleteRow(int row) 
{ 
    DeleteRow(row, 1); 
} 
/// <summary> 
/// Delete the specified row from the worksheet. 
/// </summary> 
/// <param name="rowFrom">The start row</param> 
/// <param name="rows">Number of rows to delete</param> 
public void DeleteRow(int rowFrom, int rows) 
{ 
    CheckSheetType(); 
    if (rowFrom < 1 || rowFrom + rows > ExcelPackage.MaxRows) 
    { 
     throw(new ArgumentException("Row out of range. Spans from 1 to " + ExcelPackage.MaxRows.ToString(CultureInfo.InvariantCulture))); 
    } 
    lock (this) 
    { 
     _values.Delete(rowFrom, 0, rows, ExcelPackage.MaxColumns); 
     _formulas.Delete(rowFrom, 0, rows, ExcelPackage.MaxColumns); 
     _flags.Delete(rowFrom, 0, rows, ExcelPackage.MaxColumns); 
     _commentsStore.Delete(rowFrom, 0, rows, ExcelPackage.MaxColumns); 
     _hyperLinks.Delete(rowFrom, 0, rows, ExcelPackage.MaxColumns); 
     _names.Delete(rowFrom, 0, rows, ExcelPackage.MaxColumns); 

     Comments.Delete(rowFrom, 0, rows, ExcelPackage.MaxColumns); 
     Workbook.Names.Delete(rowFrom, 0, rows, ExcelPackage.MaxColumns, n => n.Worksheet == this); 

     AdjustFormulasRow(rowFrom, rows); 
     FixMergedCellsRow(rowFrom, rows, true); 

     foreach (var tbl in Tables) 
     { 
      tbl.Address = tbl.Address.DeleteRow(rowFrom, rows); 
     } 
     foreach (var ptbl in PivotTables) 
     { 
      if (ptbl.Address.Start.Row > rowFrom + rows) 
      { 
       ptbl.Address = ptbl.Address.DeleteRow(rowFrom, rows); 
      } 
     } 
    } 
} 

public ExcelDataValidationCollection DataValidationsオブジェクトへの更新の言及はありません。

のCodePlex上の問題を参照

https://github.com/JanKallman/EPPlus/blob/master/EPPlus/ExcelWorksheet.cs#L2551

:(今githubの上の)現在のdevの枝を見てみると

はそれがある時はいつでも、それは次のリリースで解決される予定らしい

https://epplus.codeplex.com/workitem/15573

したがって、いくつかの場所で変更を加えなければならないように見えるので、難しい機能を再現しようとする可能性があります。またはgitから最新のものを取り出してコンパイルしようとします。

+0

返信いただきありがとうございます!私は既に質問をする前にlibのHEAD版を参照しようとしましたが、これで問題は解決しません – oxfn