0

我想创建一个脚本 - 存档从工作表“注册”到“存档”离开建筑物的人 - 删除空行或清除离开的人的行(单元格在 OUT 中不为空)

这里是我的脚本:

   function archive() {
  //variables pour la feuille registre
  var registre = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Registre"); // le script se positionne sur la feuille Registre
  var lastRowReg = registre.getLastRow();   // obtenir le numero de la dernière ligne éditée
  var data = registre.getRange(2, 1, lastRowReg-1,7 ).getValues();
  //variables pour la feuille archive
  var archive = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Archive");
  var lastRowArch = archive.getLastRow();
  var target = new Array();
  //recherche
  for (var i = 0; i < data.length; ++i) { //création de la boucle qui va analyser chaque ligne du tableau

    if (data[i][6]=!'') { //pour les lignes la cellule heure de sortie est vide, 
      target.push(data[i]);
      egistre.getRange(i+2,1,1,7).clearContent();
      }
    if(target.length>0){
    archive.getRange(lastRowArch+1, 1, target.length,target[0].length).setValues(target); 
    }
  }

}

调试:数据=

[[“小姐”,“muss”,“gh”,“bazar”,“da45adazd54”,“13h00”,真],[“小姐”,“muss”,“gh”,“bazar”,“da45adazd54”, "13h00", "14h00"]]

为什么是真的而不是 13h45?

文档链接

4

1 回答 1

1

请这样尝试:

function archive() {
  //variables pour la feuille registre
  var registre = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Registre"); // le script se positionne sur la feuille Registre
  var lastRowReg = registre.getLastRow();   // obtenir le numero de la dernière ligne éditée
  var data = registre.getRange(2, 1, lastRowReg-1,7 ).getValues();
  //variables pour la feuille archive
  var archive = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Archive");
  var lastRowArch = archive.getLastRow();
  var target = new Array();
  //recherche
  for (var i = 0; i < data.length; ++i) { //création de la boucle qui va analyser chaque ligne du tableau

    if (data[i][6]=='') { //pour les lignes la cellule heure de sortie est vide, 
      target.push(data[i]);
      registre.getRange(i+2,1,1,7).clearContent();
      }
    }
    if(target.length>0){
    archive.getRange(lastRowArch+1, 1, target.length,target[0].length).setValues(target); 
  }
}
  1. 从数组回写到工作表必须放在循环之外
  2. if 语句是错误的(至少与您的评论和描述不符......)

I test on a copy of your doc and it seems to work as expected... I didn't have the 'true' value.


EDIT following your comments:

Now I think I understood correctly what you were willing to do. I used a slightly different approach that works faster and more clearly (in my opinion)

I used 2 arrays, one with data for sheet 2 (archive) and one for the rows to keep (I called it newsource) so now I can clear the whole source sheet (except headers) and write the whole data in one shot without blank rows.

Here is the code, tested and working.

function archive() {
  //variables pour la feuille registre
  var registre = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Registre"); // le script se positionne sur la feuille Registre
  var lastRowReg = registre.getLastRow();   // obtenir le numero de la dernière ligne éditée
  var data = registre.getRange(2, 1, lastRowReg-1,7 ).getValues();
  //variables pour la feuille archive
  var archive = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Archive");
  var lastRowArch = archive.getLastRow();
  var target = new Array();
  var newsource = new Array();
  //recherche
  for (var i = 0; i < data.length; ++i) { //création de la boucle qui va analyser chaque ligne du tableau

    if (data[i][6]!='') { //pour les lignes la cellule heure de sortie est vide, 
      target.push(data[i]);
      }else{
      newsource.push(data[i]);
    }
  }
  if(target.length>0){
   archive.getRange(lastRowArch+1, 1, target.length,target[0].length).setValues(target); 
   }
  Logger.log(lastRowReg-1+' = '+newsource.length+' + '+target.length)
  registre.getRange(2, 1, lastRowReg-1,7 ).clearContent();
   if(newsource.length>0){
     registre.getRange(2,1,newsource.length,newsource[0].length).setValues(newsource);
    }
}

I added a Logger.log that shows a sort of "verification" of row counts to be sure no row is lost...

于 2013-03-15T12:39:19.480 回答