编辑特定列时,如何使此脚本仅 运行?
How do I get this script to only run when a specific column is edited?
纯粹基于执行日志,似乎每次有人编辑 sheet 时,此脚本都会 运行ning,但我只需要在第 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');
}
}
}
实际上与您的脚本执行的逻辑相同,但现在,我们不会将数据直接获取到 sheet,而是获取到 onEdit
事件对象。
如果您的意思是 onEdit
函数只应在第 3 列和第 7 列的编辑期间 TRIGGERED,那是行不通的。
每次手动编辑 sheet 时都会触发 onEdit
函数,无论 运行ge 是多少。我们只能通过添加条件来限制功能做事,但我们实际上无法在手动编辑完成后停止触发功能。
每次手动编辑都会运行,这只是一个限制问题,我们根据添加的条件限制功能做事。 (仅当 sheet 名称为 FORD
且列 3
或 7
被编辑时,运行 才执行某些命令的条件)
如果我误解了你的问题,我真诚地道歉。
编辑:
我正在寻找其他来源,您似乎可以使用 switch-case
而不是经典的 if-else
语句,因为它在大数据中比后者更快。我已经对其进行了测试,它似乎在单个测试中确实有一些显着差异。它在大数据中会明显更快。
如果-其他:
开关盒:
测试:
if-else
和 switch-case
的测试相同。
- 前 3 个测试是对第 3 列的编辑,后 3 个测试是对第 7 列的编辑,最后 3 个是 non-3/7 编辑
- 运行次自下而上阅读
- 这实际上因测试而异,但粘贴了这些结果,因为它似乎接近平均值。
- 存在应检查的配额。有关详细信息,请参阅 link。如果您想要更多,可能需要付费订阅。
纯粹基于执行日志,似乎每次有人编辑 sheet 时,此脚本都会 运行ning,但我只需要在第 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');
}
}
}
实际上与您的脚本执行的逻辑相同,但现在,我们不会将数据直接获取到 sheet,而是获取到 onEdit
事件对象。
如果您的意思是 onEdit
函数只应在第 3 列和第 7 列的编辑期间 TRIGGERED,那是行不通的。
onEdit
函数,无论 运行ge 是多少。我们只能通过添加条件来限制功能做事,但我们实际上无法在手动编辑完成后停止触发功能。
每次手动编辑都会运行,这只是一个限制问题,我们根据添加的条件限制功能做事。 (仅当 sheet 名称为 FORD
且列 3
或 7
被编辑时,运行 才执行某些命令的条件)
如果我误解了你的问题,我真诚地道歉。
编辑:
我正在寻找其他来源,您似乎可以使用 switch-case
而不是经典的 if-else
语句,因为它在大数据中比后者更快。我已经对其进行了测试,它似乎在单个测试中确实有一些显着差异。它在大数据中会明显更快。
如果-其他:
开关盒:
测试:
if-else
和switch-case
的测试相同。- 前 3 个测试是对第 3 列的编辑,后 3 个测试是对第 7 列的编辑,最后 3 个是 non-3/7 编辑
- 运行次自下而上阅读
- 这实际上因测试而异,但粘贴了这些结果,因为它似乎接近平均值。
- 存在应检查的配额。有关详细信息,请参阅 link。如果您想要更多,可能需要付费订阅。