e.source和e.range丢失/不可用

时间:2018-12-06 04:21:25

标签: events google-apps-script google-sheets triggers

我有一个基本的可安装触发器,试图根据工作表的编辑时间(在我的情况下选中一个特定的复选框)来发送电子邮件邀请,但是当我尝试从事件中访问范围或源对象时我分别得到[object Object]和undefined。但是我知道事件对象能够正常工作,这要归功于它能够获取oldValue,value,triggerUid和user。

function onEditCheck(e) {

  var cells = e.range.getA1Notation();
  var name = e.source.getActiveSheet().getName()

  console.log('cells: ' + cells);
  console.log('sheet name: ' + name);
  console.log('id: ' + e.triggerUid);
  console.log('edit: ' + e.value);

  if(e.oldValue === 'false' && e.value === 'TRUE') {
    sendEmail(e.user.getEmail(), e.range);
  } 
}

我能找到的唯一与此问题有关的参考文献是this question here,但是我对他们发现的“解决方案”的权限并不满意。

任何帮助或见识将不胜感激。

2 个答案:

答案 0 :(得分:1)

这是因为未向脚本授予必要的授权。

将此添加到您的代码中的某个位置:

//SpreadsheetApp.getActive()

这将触发oAuth流,并请求访问缺少的电子表格的权限。

相关:

答案 1 :(得分:0)

这对我有用:

function createTrigger(){
  var tr=ScriptApp.newTrigger('onEditCheck').forSpreadsheet('My SSID').onEdit().create();
}

function onEditCheck(e) {
  var cell = e.range.getA1Notation();
  var name = e.range.getSheet().getName();
  var data=Utilities.formatString('<br />Cell Edited: %s<br />Name of Sheet: %s<br />TriggerId: %s<br />Value: %s<br />Old Value: %s<br />',cell,name,e.triggerUid,e.value,e.oldValue);
  var userInterface=HtmlService.createHtmlOutput(data);
  SpreadsheetApp.getUi().showModelessDialog(userInterface, 'Testing')
}

通过这种方式,在创建触发器并将通知设置为立即后转到触发器编辑器确实非常方便。这样,您将很快从Google Server收到有关故障的通知。