2015-07-27 3 views
1

Я попытался с помощью EPPlus удалить столбец в моем рабочем листе с помощью решения в: How to remove a column from excel sheet in epplusEPPlus: Удаление столбца не работает

Однако, когда я запускаю этот тест блока, данные в колонке 2 просто получает убрались. Как удалить столбец в целом?

+0

Возможно, вам стоит подумать о том, чтобы предоставить нам фрагмент того, что вы пробовали. – hina10531

+0

Я использовал модульное тестовое решение по адресу: http://stackoverflow.com/questions/28359165/how-to-remove-a-column-from-excel-sheet-in-epplus В частности, ws.DeleteColumn (2) просто очищает все данные в столбце 2, но не удаляет сам столбец. –

ответ

4

Это интересно. Кажется, что добавили его в 4.0.0, а затем сломал ее с версией 4.0.4:

http://epplus.codeplex.com/workitem/15310

Если вы отчаянно вы можете загрузить исходный код и перейти bacck к оригинальной версии функции DeleteColumn (в ExcelWorksheet.cs) и перекомпилировать:

public void DeleteColumn(int columnFrom, int columns) 
{ 
    lock (this) 
    { 
     ExcelColumn col = _values.GetValue(0, columnFrom) as ExcelColumn; 
     if (col == null) 
     { 
      var r = 0; 
      var c = columnFrom; 
      if(_values.PrevCell(ref r,ref c)) 
      { 
       col = _values.GetValue(0, c) as ExcelColumn; 
       if(col._columnMax >= columnFrom) 
       { 
        col.ColumnMax=columnFrom-1; 
       } 
      } 
     } 

     _values.Delete(1, columnFrom, ExcelPackage.MaxRows, columns); 
     _types.Delete(1, columnFrom, ExcelPackage.MaxRows, columns); 
     _formulas.Delete(1, columnFrom, ExcelPackage.MaxRows, columns); 
     _styles.Delete(1, columnFrom, ExcelPackage.MaxRows, columns); 
     _flags.Delete(1, columnFrom, ExcelPackage.MaxRows, columns); 
     _commentsStore.Delete(1, columnFrom, ExcelPackage.MaxRows, columns); 
     _hyperLinks.Delete(1, columnFrom, ExcelPackage.MaxRows, columns); 

     AdjustFormulasColumn(columnFrom, columns); 
     FixMergedCellsColumn(columnFrom, columns, true); 

     var csec = new CellsStoreEnumerator<object>(_values, 0, columnFrom, 0, ExcelPackage.MaxColumns); 

     foreach (var column in csec)  
     { 
      if (column is ExcelColumn) 
      { 
       var c = (ExcelColumn)column; 
       if (c._columnMin >= columnFrom) 
       { 
        c._columnMin -= columns; 
        c._columnMax -= columns; 
       } 
      } 
     } 

     foreach (var tbl in Tables) 
     { 
      if (columnFrom > tbl.Address.Start.Column && columnFrom <= tbl.Address.End.Column) 
      { 
       var node = tbl.Columns[0].TopNode.ParentNode; 
       var ix = columnFrom - tbl.Address.Start.Column + 1; 
       for (int i = 0; i < columns; i++) 
       { 
        if (node.ChildNodes.Count > ix) 
        { 
         node.RemoveChild(node.ChildNodes[ix]); 
        } 

       } 
       tbl._cols = new ExcelTableColumnCollection(tbl); 
      } 

      tbl.Address = tbl.Address.DeleteColumn(columnFrom, columns); 
     } 
    } 
} 
+0

Спасибо за ответ. Я вернулся к 4.0.3, и теперь он работает. Я подожду, пока не будет обновлена ​​следующая версия. –

+0

@ RussellBoada Нет проблем. Только не забудьте задать вопрос как ответ, так что он не болтается там. – Ernie

 Смежные вопросы

  • Нет связанных вопросов^_^