如果我选择几个单元格(例如A1:D5)并输入一些文本来触发onEdit(e),我该如何获得所选范围?所有这些函数(e.range,.getActiveRange,.getActiveSelection)只返回一个包含新文本的单元格(A1)!
function onEdit(e){
Logger.log('A1 Notation: ' + e.range.getA1Notation());
// Try workaround using getActiveSheet. Also fails within the onEdit function.
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var range = sheet.getActiveRange();
var selection = sheet.getActiveSelection();
Logger.log('getActiveRange A1 Notation: ' + range.getA1Notation());
Logger.log('getActiveSelection A1 Notation: ' + selection.getA1Notation());
}
如果我点击删除键而不是键入文本,则范围功能按预期工作(A1:D5)。
答案 0 :(得分:2)
如果选择了一个范围,当您按删除时,将删除所有选定单元格的内容,因此您会收到一个影响所有选定单元格的范围的事件。当您在单元格中输入文本时,只有一个单元格受到影响,因此您将获得一个单个单元格范围内的事件。
如果您想测试此项,请尝试拉伸范围。您会注意到事件范围仅适用于受影响的单元格,而不适用于整个选定区域。
P.S。 - 如果您想选择一个区域并操纵内容而不尝试在事件中处理它,您应该能够创建一个自定义函数并将其显示在电子表格UI中。像这样:
function onOpen(){
var ui = SpreadsheetApp.getUi();
ui.createMenu('Top menu name')
.addItem('menu item description 1', 'functionName1' )
.addItem('menu item description 2', 'functionName2')
.addToUi();
}
functionName1(){ ...... }
etc....