0

我正在尝试使用 Romain Vialard 和 James Ferreira 书中的 Google Apps Script 建议框库在我的 Google 电子表格中添加自动完成功能(电子表格中的弹出窗口中的 Ui):

function doGet() {
  var contacts = ContactsApp.getContacts();
  var list = [];
  for(var i = 0; i < contacts.length; i++){
    var emails = contacts[i].getEmails();
    if(emails[0] != undefined){
      list.push(emails[0].getAddress());
    }
  }
  var app = UiApp.createApplication();
  var suggestBox = SuggestBoxCreator.createSuggestBox(app, 'contactPicker', 200, list);
  app.add(suggestBox);
  SpreadsheetApp.getActive().show(app);
}


function onEdit() {
  var s = SpreadsheetApp.getActiveSheet();
  if( s.getName() == "my_sheet_name" ) { //checks that we're on the correct sheet
    var r = s.getActiveCell();
    if( r.getColumn() == 1) {
      doGet();
   // testFunction();
    }
  }
}

但是当我开始编辑“my_sheet_name”的第 1 列时,什么也没有发生(testFunction()按预​​期工作)。我已经安装了 Suggest Box 库。那么,为什么 doGet() 函数不起作用?

这是我的测试电子表格: https ://docs.google.com/spreadsheet/ccc?key=0AtHEC6UUJ_rsdFBWMkhfWUQ0MEs2ck5OY1BsYjRSLXc&usp=drive_web#gid=0

4

1 回答 1

1

onEdit 是一个简单的触发器,如果​​您阅读文档,您将了解到“他们无法访问任何需要以该用户身份进行身份验证的服务”。

而您的doGet功能使用ContactsApp,这就是它静默失败的原因。

使用另一个名称并设置一个installable on Edit trigger请求授权的名称。也就是说,它不会将任何数据返回到您的电子表格(正如您在另一篇文章中已经提到,并仔细阅读有关可安装触发器的章节)。

另请参阅有关serverHandlers以及如何在 UiApp 中实现它的文档。

于 2013-11-09T17:29:25.650 回答