Answer the question
In order to leave comments, you need to log in
How to delete rows from excel file using exceljs?
The full listing is:
var Excel = require('exceljs');
var workbook = new Excel.Workbook();
workbook.xlsx.readFile('1.xlsx')
.then(function(data) {
var worksheet = workbook.getWorksheet(1);
worksheet.eachRow(function(row, rowNumber) {
var cell = row.getCell(3).value;
if (!cell) {
console.log(rowNumber);
row.splice(rowNumber, 1);
row.commit();
}
});
return workbook.xlsx.writeFile('new.xlsx');
});
row.splice(rowNumber, 1);
does not work correctly - it does not delete all lines
Answer the question
In order to leave comments, you need to log in
It's not about exceljs.
Each time you delete a row, the indexes shift and at some point you try to delete a non-existent index.
var removeEmptyRows = (worksheet) => {
// есть пустые строки
var removed = false;
// начнем
worksheet.eachRow((row, index) => {
// Получим значение
var cell = row.getCell(3).value;
// пусто?
if ( ! cell) {
// удалим строку
row.splice(index, 1);
// обновим
row.commit();
// мы нашли одну пустую строку
removed = true;
// нужно остановить цикл, потому что под индексом index теперь следующая строка
// и если мы здесь сделаем цикл удаления строк с индексом index то удалим все оставшиеся записи
// потому что при каждом удалении следующая строка будет получать текущий индекс
return false;
}
});
if(removed) {
// мы нашли одну пустую строку, а может есть еще? рекурсия!
return removeEmptyRows(worksheet);
}
// не нашли пустых строк, можно идти дальше
};
removeEmptyRows(worksheet);
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question