Il est possible de supprimer en quelque sorte toutes les lignes suivantes d’une ligne spécifique (vide)? J’ai essayé pour cyclus
for (int rowNum = 1; rowNum cell.Value != null)) { worksheet.DeleteRow(rowNum); } }
mais cela prend des minutes si, dans Excel, il y a des millions de lignes vides.
Epplus propose cette méthode worksheet.DeleteRow(int rowFrom, int rows)
mais je ne connais pas le nombre total de lignes vides supplémentaires.
Dans l’exemple suivant, j’ai besoin de supprimer toutes les lignes 12+, mais le problème est que je ne connais pas la ligne spécifique, où commencent les lignes vides.
L’approche alternative peut être de trouver la dernière ligne non vide et de tout supprimer avec la plage, ce qui sera plus rapide, mais il existe un autre problème avec une ligne vide à l’intérieur du tableau.
ws.DeleteRow(lastFilledTableRow, workSheet.Dimension.End.Row - tableRowsCount,true);
Dans cet exemple, le problème est la ligne rouge, mais je dirai peut-être aux utilisateurs que ce type de format Excel n’est pas valide et contourner le problème.
Je sais que c’est vieux mais je ne pouvais pas trouver de solution alors faites-en une par moi-même. Il vérifie la dernière ligne s’il est vide et si oui, il la supprime et le fait jusqu’à ce qu’il trouve une ligne non vide. (non vide signifie ici: toutes les colonnes de cette ligne ont une valeur)
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(); 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); }