我有两个onEdit函数可以单独工作,但是我似乎无法正确组合它们以同时运行。
我的目标是为第9列中的单元格添加时间戳,并在第1列中选中此复选框时,将整行复制到新的工作表中。
我遵循了Stackoverflow其他地方发布的关于触发器,重命名功能等的建议,但是至多我只能让第一个功能运行。
function onEdit(e) {
var colToWatch = 1, colToStamp = 9;
var valueToWatch = "TRUE";
if (e.range.columnStart === colToWatch && (e.value === valueToWatch ||
typeof e.value == 'object'))
e.source.getActiveSheet()
.getRange(e.range.rowStart, colToStamp)
.setValue(typeof e.value === 'object' ? null : new Date());
}
function onEdit(event) {
// assumes source data in sheet named Active
// target sheet of move to named Found
// test column with yes/no is col 1 or A
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = event.source.getActiveSheet();
var r = event.source.getActiveRange();
if(s.getName() == "Jessica" && r.getColumn() == 1 && r.getValue() == true) {
var row = r.getRow();
var numColumns = s.getLastColumn();
var targetSheet = ss.getSheetByName("Done");
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
s.getRange(row, 1, 1, numColumns).copyTo(target);
}
}
我希望两个函数都可以运行,但是我担心我得到了太多不同的建议,现在两个函数都不能在编辑时运行。
答案 0 :(得分:2)
不能有两个共享相同名称的函数,因此在尝试拥有两个单独的onEdit()
函数时会遇到问题。重写脚本,以便只有一个功能;并通读triggers
答案 1 :(得分:0)
在时间戳功能中,您正在使用Range的两个未定义属性:e.range.columnStart
和e.range.rowStart
。当您将代码替换为e.range.getColumn()
和e.range.getRow()
时,代码将起作用。
我建议重命名功能以描述它们的功能,然后制作一个新的onEdit
,以正确的顺序调用这些功能。
这是一个有效的示例:
function onEdit(e) {
timestamp(e);
copyRow(e);
}
function timestamp(e) {
var colToWatch = 1, colToStamp = 9;
var valueToWatch = "TRUE";
if (e.range.getColumn() === colToWatch &&
(e.value === valueToWatch || typeof e.value == 'object')) {
e.source.getActiveSheet()
.getRange(e.range.getRow(), colToStamp)
.setValue(typeof e.value === 'object' ? null : new Date());
}
}
function copyRow(event) {
// assumes source data in sheet named Active
// target sheet of move to named Found
// test column with yes/no is col 1 or A
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = event.source.getActiveSheet();
var r = event.source.getActiveRange();
if (s.getName() == "Jessica" &&
r.getColumn() == 1 &&
r.getValue() == true) {
var row = r.getRow();
var numColumns = s.getLastColumn();
var targetSheet = ss.getSheetByName("Done");
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
s.getRange(row, 1, 1, numColumns).copyTo(target);
}
}