Google apps script 将行从一张图纸移动到另一张图纸

Google apps script 将行从一张图纸移动到另一张图纸,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我需要根据背景颜色将行从挂起的工作表移动到存档工作表。我找到了一个脚本,并设法编辑它以适应我的需要,除了一些我不知道的事情,我不知道如何编码,除了一些基本的学校的东西。我工作的目的是: function onEdit(event) { // assumes source data in sheet named Pendientes // target sheet of copy to named Enviados // getColumn with color is currentl

我需要根据背景颜色将行从挂起的工作表移动到存档工作表。我找到了一个脚本,并设法编辑它以适应我的需要,除了一些我不知道的事情,我不知道如何编码,除了一些基本的学校的东西。我工作的目的是:

function onEdit(event) {
  // assumes source data in sheet named Pendientes
  // target sheet of copy to named Enviados
  // getColumn with color is currently set to colu 3 or C
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = event.source.getActiveSheet();
  var r = event.source.getActiveRange();

  if(s.getName() == "Pendientes" && r.getColumn() == 3 && r.getBackground() == "#00ff00") {
    var row = r.getRow();
    var numColumns = s.getLastColumn();
    var targetSheet = ss.getSheetByName("Enviados");
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    s.getRange(row, 1, 1, numColumns).copyTo(target, {contentsOnly:true});
    s.deleteRow(row);
    targetSheet.getRange(targetSheet.getLastRow(), 7).setValue(new Date()).setNumberFormat("dd-mm-yy");
    targetSheet.insertRowAfter(targetSheet.getLastRow())
  }
}
​我不明白的是: 脚本最初是在编辑单元格内容时运行的,背景色不起作用,我花了一段时间才弄清楚它为什么不起作用,并在值从false更改为true时移动了行。 我想做的是将触发器更改为我创建的自定义菜单,这样当您单击它时,它会查看所有行,找到背景为绿色的单元格,并将它们移动到存档中。因为原始脚本使用了一个事件,每次进行编辑并分析这一时刻时都会触发脚本,我不知道该怎么做。 如果可能的话,我还希望单元格按照第2列的顺序传输,因此首先它在第3列中查找绿色单元格,在第2列中使用OptionA并移动它,然后使用OptionB,依此类推

我也不确定我添加的为每移动一行插入一行的行在移动行时是否有效,这意味着如果它移动10行,它将插入10个新行或一行

我制作了一张我一直在做实验的样本表:


谢谢

此函数获取相同范围内的数据和背景色。在我等待您解释其余问题时,在行中的任意位置查找颜色。In然后获取数据数组中相应的行,并在末尾推送一个时间戳,然后将其附加到目标工作表。它使用i索引删除该行,并使用删除计数器d对删除的行进行计数。因为当从工作表中删除行时,它们不会从vA或cA数组中删除

function deleteRowWithGreenBackGroundAnyWhere() {
  const ss=SpreadsheetApp.getActive();
  const sh=ss.getSheetByName('Penientes');
  const rg=sh.getRange(3,1,sh.getLastRow()-2,sh.getLastColumn());
  const vA=rg.getValues();
  const cA=rg.getBackgrounds();
  const tsh=ss.getSheetByName("Enviados");
  const ts=Utilties.formatDate(new Date(),Session.getScriptTimeZone(),"dd-MM-yy");
  var d=0;
  cA.forEach(function(r,i){
    r.forEach(function(c,j){
      if(c=='#00ff00') {
        var tA=vA[i].slice();
        sh.appendRow(tA.push(ts));
        sh.deleteRow(i+3-d++);
      }
    });
  });
}
根据这一解释,如果可能的话,我还希望单元格按照第2列的顺序传输,因此首先它在第3列中查找绿色单元格,并在第2列中使用OptionA移动它,然后使用OptionB移动它,依此类推。你的电子表格毫无意义。我看不到任何选择A或选择B