Epplus удалить все строки из определенной строки


Можно как-то удалить все следующие строки из конкретной (пустой) строки ? Я пробовал цикл

            for (int rowNum = 1; rowNum <= worksheet.Dimension.End.Row; rowNum++)
            {
                var rowCells = from cell in worksheet.Cells
                               where (cell.Start.Row == rowNum)
                               select cell;

                if (!rowCells.Any(cell => cell.Value != null))
                {
                    worksheet.DeleteRow(rowNum);
                }

            }

Но это занимает минуты, если в excel находятся миллионы пустых строк.

Epplus предлагают этот метод worksheet.DeleteRow(int rowFrom, int rows), но я не знаю количество всех дополнительных пустых строк.

В следующем примере мне нужно удалить все строки 12+ , но проблема в том, что я не знаю конкретную строку, где начинаются пустые строки.

Введите описание изображения здесь

Альтернатива примерно можно найти последнюю непустую строку и удалить все с диапазоном, что будет быстрее, но есть еще одна проблема с пустой строкой внутри таблицы.

ws.DeleteRow(lastFilledTableRow, workSheet.Dimension.End.Row - tableRowsCount,true);

В этом примере проблема заключается в Красной строке, но, возможно, я скажу пользователям, что этот формат excel недопустим и обойду проблему.

Введите описание изображения здесь

1 2

1 ответ:

Я знаю, что он стар, но я не мог найти никакого решения, поэтому сделал его своим собственным. Он проверяет последнюю строку, если она пуста, и если да, то удаляет ее и делает это до тех пор, пока не найдет непустую строку. (непустой означает здесь: все столбцы в этой строке имеют некоторое значение)

worksheet.TrimLastEmptyRows();

public static void TrimLastEmptyRows(this ExcelWorksheet worksheet)
    {
        while (worksheet.IsLastRowEmpty())
            worksheet.DeleteRow(worksheet.Dimension.End.Row);
    }

public static bool IsLastRowEmpty(this ExcelWorksheet worksheet)
    {
        var empties = new List<bool>();

        for (int i = 1; i <= worksheet.Dimension.End.Column; i++)
        {
            var rowEmpty = worksheet.Cells[worksheet.Dimension.End.Row, i].Value == null ? true : false;
            empties.Add(rowEmpty);
        }

        return empties.All(e => e);
    }