Почему я не могу удалить строку в Excel? - PullRequest
0 голосов
/ 04 апреля 2019

Я использую EPPlus , чтобы удалить только одну строку с индексом 10, используя этот код:

using (var p = new ExcelPackage(fi))
{
   var ws = p.Workbook.Worksheets[1];
   ws.DeleteRow(10, 1);
}

Когда я сохраняю выходной файл, я вижу, что в файле есть строка:

p.SaveAs(new FileInfo("c:\\output.xlsx"));

Почему строка не удаляется?

Мой полный код:

  using(var p = new ExcelPackage(fi)) {

   var ws = p.Workbook.Worksheets[1];
   var start = ws.Dimension.Start;
   var end = ws.Dimension.End;

   for (int row = start.Row + 1; row <= end.Row; row++) {
    for (int col = start.Column; col <= end.Column; col++) {

     var value = ws.Cells[row, 5].Value ? ? string.Empty;
     if (value == null || value == String.Empty || value == "") {

      ws.DeleteRow(row, 1);

     }
    }
   }

   p.SaveAs(new FileInfo("c:\\Projects\\excel\\output.xlsx"));
  }

Я пытаюсь удалить все строки, где значения в столбце с индексом 5 пусто

1 Ответ

1 голос
/ 05 апреля 2019

Я думаю, проблема в том, что вы зацикливаетесь сверху вниз.При удалении ячеек Excel автоматически сместит остальные строки вверх, что приведет к пропуску строк при циклическом цикле сверху вниз.

Попробуйте это для своего цикла:

 for (int row = end.Row; row >= start.Row; row--)
        {
            var value = ws.Cells[row, 5].Value ?? string.Empty;

            if (value.Equals(String.Empty))
            {
                ws.DeleteRow(row, 1);
            }

        }

Пара примечаний:

  • Нет необходимости циклически проходить по столбцам, если вы оцениваете один и тот же столбец каждыйвремя.Просто проверьте значение этой ячейки для каждой строки.
  • value никогда не будет нулевым из-за оператора ??.Вы можете упростить оператор if, чтобы просто проверить, являются ли String.Empty.
  • String.Empty и "" одинаковыми значениями, поэтому вам нужно только оценить одно или другое.
  • При оценкестроки, которые я бы рекомендовал использовать .Equals().Использование == может привести к плохим результатам. C # разница между == и Equals ()
...