我有一个正在处理的谷歌表格。
我有一个脚本,当我在第一个选项卡上更新column A
时,它会用时间戳填充column B
。但是我需要它在第二个选项卡上做同样的事情,但我无法让它在那里工作。我需要更改什么?
我当前使用的脚本是:
function onEdit(e) {
var sheetToWatch= 'Wrong Grading',
columnToWatch = 1,
columnToStamp = 2; //change all of these to your needs
if (e.range.columnStart !== columnToWatch
|| e.source.getActiveSheet().getName() !== sheetToWatch
|| !e.value)
return;
e.source.getActiveSheet()
.getRange(e.range.rowStart, columnToStamp)
.setValue(new Date());
}
对于未来的读者,Paul 问题中的代码片段来自 Google 文档帮助论坛上的代码,其中包括详细的逐行解释。
该函数使用变量sheetToWatch
来标识onEdit()
函数关注的一个工作表(也称为"选项卡")。通过以下比较验证了这一点:
|| e.source.getActiveSheet().getName() !== sheetToWatch
。如果当前触发事件的源不匹配,则该函数将退出而不执行任何操作。
我需要更改什么?如果您希望此功能适用于电子表格中的所有工作表,则可以完全消除此检查:
function onEdit(e) {
var columnToWatch = 1,
columnToStamp = 2; //change all of these to your needs
if (e.range.columnStart !== columnToWatch
|| !e.value)
return;
e.source.getActiveSheet()
.getRange(e.range.rowStart, columnToStamp)
.setValue(new Date());
}
如果要让onEdit()
在一组工作表上运行,则可以更改上面的比较,以检查是否在工作表名称数组中找到当前工作表的名称。这将更改与此的比较:
|| sheetsToWatch.indexOf( e.source.getActiveSheet().getName() ) === -1
您可以在此处了解有关indexOf()
方法的更多信息。不过,它所做的是获取事件触发器源表的名称,在 sheetsToWatch
数组中找到它,并返回找到的索引。如果工作表未出现在数组中,则indexOf()
返回-1
。
生成的函数为:
function onEdit(e) {
var sheetsToWatch= ['Wrong Grading',
'Something Else'],
columnToWatch = 1,
columnToStamp = 2; //change all of these to your needs
if (e.range.columnStart !== columnToWatch
|| sheetsToWatch.indexOf( e.source.getActiveSheet().getName() ) === -1
|| !e.value)
return;
e.source.getActiveSheet()
.getRange(e.range.rowStart, columnToStamp)
.setValue(new Date());
}