如何解决如何让此脚本仅在编辑特定列时运行? 代码:编辑:if-else:切换案例:测试:
纯粹基于执行日志,似乎这个脚本在每次任何人编辑工作表时都在运行,但我只需要在编辑第 3 列或第 7 列时运行它。我在脚本中添加什么来告诉它这样做?我不懂超级脚本,所以非常感谢任何帮助!!
function onEdit() {
var s = SpreadsheetApp.getActiveSheet();
if( s.getName() == "FORD" ) {
var r = s.getActiveCell();
if( r.getColumn() == 3) {
var nextCell = r.offset(0,19);
if( nextCell.getValue() === '' )
nextCell.setValue(new Date()).setNumberFormat('MM/dd/yyyy HH:mm:ss');
}
if( r.getColumn() == 7) {
var nextCell = r.offset(0,16);
if( nextCell.getValue() === '' )
nextCell.setValue(new Date()).setNumberFormat('MM/dd/yyyy HH:mm:ss');
}
}
}
解决方法
你的代码实际上适用于我的代码,这很奇怪吗?如果我正确理解您的问题,您希望您的脚本在第 3 列和第 7 列时运行。我没有看到您的脚本有任何问题,但我认为下面的这种方法应该更好。我们将使用 e
对象来获取您的数据。
代码:
function onEdit(e) {
var s = e.source.getActiveSheet();
if( s.getName() == "FORD" ) {
var r = e.range;
if( r.getColumn() == 3) {
var nextCell = r.offset(0,19);
if( nextCell.getValue() === '' )
nextCell.setValue(new Date()).setNumberFormat('MM/dd/yyyy HH:mm:ss');
}
if( r.getColumn() == 7) {
var nextCell = r.offset(0,16);
if( nextCell.getValue() === '' )
nextCell.setValue(new Date()).setNumberFormat('MM/dd/yyyy HH:mm:ss');
}
}
}
与您的脚本执行的逻辑几乎相同,但现在,我们不会将数据直接获取到工作表中,而是将 onEdit
事件对象获取。
如果您的意思是 onEdit
函数应该只在编辑第 3 列和第 7 列时TRIGGERED,那是不行的。
onEdit
函数,无论它是什么范围。我们只能通过添加条件来限制函数做事,但是我们实际上不能在手动编辑完成后停止触发函数。
它总是会在每次手动编辑时运行,这只是一个限制问题,我们限制函数根据我们添加的条件执行操作。 (仅当工作表名称为 FORD
且列 3
或 7
被编辑时才运行某些命令等条件)
如果我误解了你的问题,我真诚地道歉。
编辑:
我正在寻找其他来源,看来您可以使用 switch-case
代替经典的 if-else
语句,因为它在大数据中比后者更快。我已经测试过它,它似乎在单次测试中确实有一些显着差异。在大数据中它会明显更快。
if-else:
切换案例:
测试:
-
if-else
和switch-case
的测试相同。 - 前 3 个测试是对第 3 列的编辑,后 3 个测试是在第 7 列上,最后 3 个是非 3/7 编辑
- 自下而上读取运行时间
- 这实际上因测试而异,但粘贴了这些结果,因为它似乎接近平均值。
- 存在配额,应进行检查。有关详细信息,请参阅 link。如果您想要更多,您可能需要付费订阅。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。