首页 > 解决方案 > 事件触发器根据 2 列中的值将行移动到另外两个工作表之一

问题描述

电子表格的图片我对 Google Apps 脚本还很陌生,需要一些帮助。

我有一个名为“开始”的电子表格,其中有一个带有复选框的“已接收”列。如果复选框被编辑为真,我可以将该行移动到另一张表,但我需要再添加一个条件。

如果 Received 列被编辑为 true 并且 Location 是 Store,我想将该行移动到 Target1 工作表。如果 Received 列被编辑为 true 并且 Location 是 Area,我想将该行移动到 Target2 工作表。

这是我的测试电子表格的链接: https ://docs.google.com/spreadsheets/d/1exixeyE1ByMPnZ-gVf6i1vm_rKOcHb8Kj06_ubvhlQc/edit?usp=sharing

这是我到目前为止的脚本:

function onEdit(event) {
  // assumes source data in sheet named main
  // target sheet of move to named Completed
  // getColumn with check-boxes is currently set to colu 4 or D
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = event.source.getActiveSheet();
  var r = event.source.getActiveRange();

  if(s.getName() == "Start" && r.getColumn() == 4 && r.getValue() == true) {
    var row = r.getRow();
    var numColumns = s.getLastColumn();
    var targetSheet1 = ss.getSheetByName("Target1");
    var targetSheet2 = ss.getSheetByName("Target2");
    var target1 = targetSheet1.getRange(targetSheet1.getLastRow() + 1, 1);
    var target2 = targetSheet2.getRange(targetSheet2.getLastRow() + 1, 1);
    var locationStore = ss.getSheetByName("Start") && r.getColumn() == 3 && r.getValue() == "Store"; 
    var locationArea = ss.getSheetByName("Start") && r.getColumn() == 3 && r.getValue() == "Area"; 
    if (locationStore) {
    s.getRange(row, 1, 1, numColumns).moveTo(target1);
    s.deleteRow(row);
    } if (locationArea) {
    s.getRange(row, 1, 1, numColumns).moveTo(target2);
    s.deleteRow(row);
    }
  } 
}

希望有人有解决方案!预先感谢您的帮助。

标签: if-statementgoogle-apps-script

解决方案


试试这个:

由于您的操作涉及更改用户数据,您可能需要这是一个可安装的触发器,如果​​您确实使其可安装,请将其名称更改为 onEdit() 以外的名称,以便简单的触发器不会激活它。

function onMyEdit(e) {
  e.source.toast('Entry');
  var sh=e.range.getSheet();
  sh.getRange('A23').setValue(JSON.stringify(e));
  if(sh.getName()=="Sheet14" && e.range.columnStart==4 && e.value=="TRUE") {
    e.source.toast('Flag1');
    e.range.setValue('FALSE');
    var tsh1=e.source.getSheetByName("Target1");
    var tsh2=e.source.getSheetByName("Target2");
    var trg1=tsh1.getRange(tsh1.getLastRow()+1,1);
    var trg2=tsh2.getRange(tsh2.getLastRow()+1,1);
    if (e.range.offset(0,-1).getValue()=="Store") {
      sh.getRange(e.range.rowStart,1,1,sh.getLastColumn()).moveTo(trg1);
      sh.deleteRow(e.range.rowStart);
    }else if (e.range.offset(0,-1).getValue()=="Area") {
      sh.getRange(e.range.rowStart,1,1,sh.getLastColumn()).moveTo(trg2);
      sh.deleteRow(e.range.rowStart);
    }
  } 
}

推荐阅读