Google 脚本:根据值将行从一个 sheet 复制到另一个

Google Script: Copy row from one sheet to another depending on value

虽然我看过类似的问题,但如果我没记错的话,我没有看到这个具体的问题。

所以,我需要阅读特定列中的所有信息(在这种情况下,它将是 AF,无论我是否一直在使用该传播sheet 来尝试我一直在做的事情)然后检查该列中的单元格是否具有值(或字符串,对不起 Google 脚本的新功能)“已完成”,然后将与该单元格对应的整行复制到辅助 sheet,它将存储所有完成的案例和东西。

我一直试图通过 google 找到一些东西,但它总是如何复制整个 sheet,我认为这没有用,而且我所做的 rn 复制单元格,无论值是多少在那个单元格+列

function copyIf() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var source = ss.getSheetByName("Stuff"); 
  var destination = ss.getSheetByName("Terminados");
  var condition = source.getRange('D2:D2000').getValue();
  if (condition == "Terminado") {  
    source.getRange('A2').copyTo(destination.getRange('A2'));
    source.getRange('A3').copyTo(destination.getRange('A3'));
  } 
}

我想我可能应该实施某种 for 或 while 循环,因为我希望它 运行 不断地所以每当有人将某个单元格的状态更改为 Terminado 以将该行复制到辅助 sheet.

试试这个

function copyIf() {
  var feuille = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Stuff");
  var archive = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Terminados");
  if (feuille.getLastRow()==1){
    SpreadsheetApp.getActive().toast('No data!', 'End of script ️')
    return
  }
  var data = feuille.getRange(2,1,feuille.getLastRow()-1,feuille.getLastColumn()).getValues()
  var archiveData = []
  var lignes = []
  var ligne = 1
  var col = 31 // AF
  try {
    data.forEach(function (row) {
      if (row[col]=="Terminado") {
        archiveData.push(row)
        lignes.push(ligne)
      }
    })
    archive.getRange(archive.getLastRow() + 1, 1, archiveData.length, archiveData[0].length).setValues(archiveData)
    // lignes.reverse().forEach(x => feuille.deleteRow(x));
    SpreadsheetApp.getActive().toast('Rows '+lignes.flat()+' hab been archived !', 'End of script ️')
  } catch (e) {
    SpreadsheetApp.getActive().toast('No data to be archived!', 'End of script ️')
  }
}

如果要在处理后删除行,请在 lignes.reverse().forEach(x => feuille.deleteRow(x));

之前删除 //