将行从一张纸移动到另一张纸

时间:2020-05-04 23:43:12

标签: 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 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列中使用OptionA在第2列中查找绿色单元格,然后将其移动,然后使用OptionB,依此类推。

我也不确定在大规模移动行时添加的用于为每行移动插入1行的行是否有效,这意味着如果移动10行将插入10条新行或1行。

我制作了一个示例纸,在其中进行了实验:
https://docs.google.com/spreadsheets/d/1tzGnuT107u1msx6BchZAEHE7NbsxIVcqXasGilQeTbA/edit?usp=sharing

谢谢!

1 个答案:

答案 0 :(得分:1)

此功能使数据和背景色在相同范围内。在等待您解释其余问题时,请在行中的任意位置查找颜色。然后,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++);
      }
    });
  });
}
相关问题