Google Apps脚本:如何使此自动填充库在UI中运行?

时间:2013-11-09 16:19:27

标签: google-apps-script google-sheets

我正在尝试使用来自Romain Vialard和James Ferreira的书中的Google Apps脚本建议箱库,在我的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

1 个答案:

答案 0 :(得分:1)

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

您的doGet函数使用ContactsApp,这就是它无声地失败的原因。

使用其他名称并设置要求授权的installable on Edit trigger。也就是说,它不会向您的电子表格返回任何数据(如前面提到的here,并仔细阅读有关可安装触发器的章节。)

另请参阅this doc有关serverHandlers以及如何在UiApp中实现它的信息。