if-statement - 事件触发器根据 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);
}
}
}
希望有人有解决方案!预先感谢您的帮助。
解决方案
试试这个:
由于您的操作涉及更改用户数据,您可能需要这是一个可安装的触发器,如果您确实使其可安装,请将其名称更改为 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);
}
}
}