Home > Net >  cascading row deletion javascript
cascading row deletion javascript

Time:09-22

I start in the programming and in the google sheet folder I would like to delete the lines after 60 days according to the date column L (12). the program works but as soon as a line is deleted, all the other lines are deleted. find below my code on google app script.

//trouver le nom du classeur
  var date1 ; 
  var date2 = new Date();
  var classeur = SpreadsheetApp.getActiveSpreadsheet();
  var couleur ;
  var feuilles = classeur.getSheets();
  // for (var i=0 ; i<sheets.length ; i  ) out.push( [ sheets[i].getName() ] )

//trouver le nombre de feuilles dans le classeur ???


 
//pour chaque feuille, il faut
//pour chaque ligne, étudier la cellule L
//si vide ou < 31 alors rien
//si >= effacer la ligne 
  
function coloriage() {
  for (var i=0 ;i<feuilles.length ; i   ) {
    var feuille = feuilles[i] ;
    var transports = feuille.getDataRange();
    var donnees = transports.getValues();    
    for (var ligne = 6 ; ligne < donnees.length ; ligne  ) {        
      date1 = donnees[ligne][11]; 
      if (date1 != "") {
        // différence de jours
        var jours = Math.round((date2.getTime() - date1.getTime()) / (1000 * 3600 * 24));
        //Logger.log("ligne= " ligne  " date1= " date1 " jours= " jours);
        if (jours < 40) {
          if (jours<20) { couleur = "#fff" ; }
          if ((jours>=20)&&(jours<30)) { couleur = "#fd0" ; }
          if ((jours>=30)&&(jours<40)) { couleur = "#f75" ; }
          feuille.getRange(ligne 1,1,1,12).setBackground(couleur);
          }
        else { 
        feuille.deleteRows(ligne 1,1)
        Logger.log("ligne " (ligne 1) " supprimée ; nb de jours " jours);
        ligne --
        }
      }
    }
  }
}

Thank you in advance for your help.

CodePudding user response:

You have a loop with line, and inside the loop you affect the value of line ligne -- ... weird. If you want to remove rows, reverse your loop as follows

for (var ligne = donnees.length-1 ; ligne >= 6 ; ligne--)

CodePudding user response:

You can also simply remove the ligne -- instruction as whenever the code ends up on the else branch, it creates an infinite loop and all the rows end up being deleted.

Therefore, your else will look simply like this:

else { 
   feuille.deleteRows(ligne 1,1);
   Logger.log("ligne " (ligne 1) " supprimée ; nb de jours " jours);
}
  • Related