onEdit触发e.range只有一个单元而不是整个选择

时间:2017-01-20 22:25:50

标签: google-apps-script

如果我选择几个单元格(例如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)。

1 个答案:

答案 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....