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 ответ:
Я знаю, что он стар, но я не мог найти никакого решения, поэтому сделал его своим собственным. Он проверяет последнюю строку, если она пуста, и если да, то удаляет ее и делает это до тех пор, пока не найдет непустую строку. (непустой означает здесь: все столбцы в этой строке имеют некоторое значение)
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); }