根据单元格值将行从一个编辑(事件)移动到不同的工作表



我需要运行一个由onedit(事件(触发的脚本,根据分配的单元格值将其发送到不同的工作表。我有一个下拉列表来选择研究者姓名和每个研究者姓名对应的表格:

function onEdit(event){
// assumes source data in sheet named [Pending assignment]
// target sheet of move to named [investigator]
// test column with [investigator name] is col 2 or B
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = event.source.getActiveSheet();
var r = event.source.getActiveRange();
if(s.getName() == "Pending assignment" && r.getColumn() == 2 && r.getValue() == "Investigator 1") {
var row = r.getRow();
var numColumns = s.getLastColumn();
var targetSheet = ss.getSheetByName("Investigator 1");
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
s.getRange(row, 1, 1, numColumns).moveTo(target);
s.deleteRow(row);
}
}

我可以让代码一次只为一个名字工作。我尝试过OR语句和组合函数,但没有成功(或者可能我只是写错了(。有没有一种方法可以让这个函数工作,根据单元格值将行发送到不同的工作表?

提前谢谢。

试试这个:

function onEdit(e) {
e.source.toast('entry');
const tshs = ['Investigator 1','Investigator 2','Investigator 3'];
const sh = e.range.getSheet();
const idx = tshs.indexOf(e.value);
if (sh.getName() == "Pending assignment" && e.range.columnStart == 2 && ~idx) {
let tsh = e.source.getSheetByName(tshs[idx]);
let tgt = tsh.getRange(tsh.getLastRow() + 1, 1);
sh.getRange(e.range.rowStart, 1, 1, sh.getLastColumn()).moveTo(tgt);
sh.deleteRow(e.range.rowStart);
}
}

也许这会奏效:

function onEdit(e) {
e.source.toast('entry');
const tshs = ['Investigator 1','Investigator 2','Investigator 3'];
const sh = e.range.getSheet();
const idx = tshs.indexOf(e.value);
if (sh.getName() == "Pending assignment" && e.range.columnStart == 2 && ~idx) {
let tsh = e.source.getSheetByName(tshs[idx]);
let tgt = tsh.getRange(tsh.getLastRow() + 1, 1);
sh.getRange(e.range.rowStart, 1, 1, sh.getLastColumn()).moveTo(tgt);
sh.deleteRow(e.range.rowStart);
}
if(~tshs.indexOf(sh.getName()) && e.range.columnStart == 1 && e.value == 'Completed') {
let tsh = e.source.getSheetByName('Completed');
let tgt = tsh.getRange(tsh.getLastRow() + 1, 1);
sh.getRange(e.range.rowStart,1,1,sh.getLastColumn()).moveTo(tgt);
sh.deleteRow(e.range.rowStart);
}
}

最新更新