有没有办法确定在 Google 表格脚本中与 onEdit 一起使用的编辑类型?
Is there a way to determine the type of edit used with onEdit in a Google Sheets Script?
我需要知道用户是在删除行、编辑单元格还是粘贴一堆单元格。我一直在查看文档,但找不到确定用户操作的方法。有没有办法知道 onEdit 中使用了什么样的操作?
目前无法使用 onEdit()
。您可以从 Edit Event Object 中找到的最多是单元格的旧/新值。 注意:这仅在只有一个单元格被编辑时有效。
例如,您可以使用 e.range
来确定已编辑的范围,但它不会告诉您已发生的编辑类型。
您可以为表格使用可安装的更改事件侦听器。
https://developers.google.com/apps-script/guides/triggers/events#change
可以通过测试 REMOVE_ROW
更改类型来确定行是否被删除。
还可以确定编辑的是单个单元格还是多个单元格。请参阅下面的代码。
粘贴不会插入行或列,因此如果更改类型 "EDIT" 发生,那么您可以假设没有插入行或列。我不知道有什么方法可以同时手动编辑多个单元格,所以如果活动范围包含多个单元格,那么它可能是 "paste."
function nameOfFunction(e) {
var A1Notation,typeOfChange;
//Install this function as a trigger for Sheets change
typeOfChange = e.changeType;//Get the type of change that was made
Logger.log('typeOfChange: ' + typeOfChange)
Logger.log('typeof typeOfChange: ' + typeof typeOfChange)
switch(typeOfChange) {
case 'REMOVE_ROW':
Logger.log('A row was deleted')
break;
case 'EDIT':
A1Notation = SpreadsheetApp.getActiveRange().getA1Notation();
Logger.log('A1Notation: ' + A1Notation)
if (A1Notation.indexOf(":") === -1) {//There is NOT a colon in the A1 notation
Logger.log('An Edit was made to a single cell')
} else {
Logger.log('An Edit was made to MULTIPLE cells')
}
break;
case 'OTHER':
/* This is NOT an edit of types
EDIT, INSERT_ROW, INSERT_COLUMN, REMOVE_ROW, REMOVE_COLUMN, INSERT_GRID, REMOVE_GRID, FORMAT
*/
Logger.log('This is NOT an edit or a row Deletion')
break;
default:
}
}
事件触发器中有什么?
如果你想知道事件对象中有什么,你可以这样做:
function onEdit(e) {
Logger.log(JSON.stringify(e));
}
对于简单的 onEdit() 触发器,这是它包含的内容:
[19-05-30 10:19:36:809 MDT] {"authMode":{},"range":{"columnStart":4,"rowStart":4,"rowEnd":4,"columnEnd":4},"source":{},"user":{"nickname":"Your Nickname","email":"Your Email"},"value":"NewValue"}
我需要知道用户是在删除行、编辑单元格还是粘贴一堆单元格。我一直在查看文档,但找不到确定用户操作的方法。有没有办法知道 onEdit 中使用了什么样的操作?
目前无法使用 onEdit()
。您可以从 Edit Event Object 中找到的最多是单元格的旧/新值。 注意:这仅在只有一个单元格被编辑时有效。
例如,您可以使用 e.range
来确定已编辑的范围,但它不会告诉您已发生的编辑类型。
您可以为表格使用可安装的更改事件侦听器。
https://developers.google.com/apps-script/guides/triggers/events#change
可以通过测试 REMOVE_ROW
更改类型来确定行是否被删除。
还可以确定编辑的是单个单元格还是多个单元格。请参阅下面的代码。
粘贴不会插入行或列,因此如果更改类型 "EDIT" 发生,那么您可以假设没有插入行或列。我不知道有什么方法可以同时手动编辑多个单元格,所以如果活动范围包含多个单元格,那么它可能是 "paste."
function nameOfFunction(e) {
var A1Notation,typeOfChange;
//Install this function as a trigger for Sheets change
typeOfChange = e.changeType;//Get the type of change that was made
Logger.log('typeOfChange: ' + typeOfChange)
Logger.log('typeof typeOfChange: ' + typeof typeOfChange)
switch(typeOfChange) {
case 'REMOVE_ROW':
Logger.log('A row was deleted')
break;
case 'EDIT':
A1Notation = SpreadsheetApp.getActiveRange().getA1Notation();
Logger.log('A1Notation: ' + A1Notation)
if (A1Notation.indexOf(":") === -1) {//There is NOT a colon in the A1 notation
Logger.log('An Edit was made to a single cell')
} else {
Logger.log('An Edit was made to MULTIPLE cells')
}
break;
case 'OTHER':
/* This is NOT an edit of types
EDIT, INSERT_ROW, INSERT_COLUMN, REMOVE_ROW, REMOVE_COLUMN, INSERT_GRID, REMOVE_GRID, FORMAT
*/
Logger.log('This is NOT an edit or a row Deletion')
break;
default:
}
}
事件触发器中有什么?
如果你想知道事件对象中有什么,你可以这样做:
function onEdit(e) {
Logger.log(JSON.stringify(e));
}
对于简单的 onEdit() 触发器,这是它包含的内容:
[19-05-30 10:19:36:809 MDT] {"authMode":{},"range":{"columnStart":4,"rowStart":4,"rowEnd":4,"columnEnd":4},"source":{},"user":{"nickname":"Your Nickname","email":"Your Email"},"value":"NewValue"}