K
K
Konstantin2019-04-05 01:12:47
Node.js
Konstantin, 2019-04-05 01:12:47

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');

    });

For some reason it 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

1 answer(s)
E
Evgeny Kumanin, 2019-04-05
@Junart1

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 question

Ask a Question

731 491 924 answers to any question