Google Apps脚本:如何使建议框库工作?

时间:2013-11-09 03:51:07

标签: autocomplete google-apps-script google-sheets

我正在尝试使用来自Romain Vialard和James Ferreira的书中的this Google Apps Script suggest box library在我的Google电子表格中添加自动填充功能:

function doGet() {
  // Get a list of all my Contacts
  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);
  return 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();
    }
  }
}

但是当我开始编辑“my_sheet_name”的第1列时,没有任何问题(如果我将doGet()替换为其他函数,则此其他函数运行Ok)。我已经安装了Suggest Box库。那么,为什么doGet()函数不起作用?

1 个答案:

答案 0 :(得分:1)

这里的小混乱......

您在此处使用的doGet() ..... return app;结构适用于需要在浏览器窗口中使用自己的URL部署和运行的独立Web应用程序。

您要做的是在电子表格的弹出窗口中显示Ui,机制不同:请参阅下面的示例并查看documentation here

function doGet_or_any_other_name_preferably_something_more_specific() {
  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);
}

请注意,此代码将允许Ui显示,但这是关于所有....由于您没有实现处理数据返回的任何处理程序,因此不会在电子表格中写入任何数据。有关该步骤的详细信息,请阅读上述文档和Romain's website.

上显示的示例

按照您的评论编辑:使用此确切代码进行测试(复制/粘贴)并正常工作,请参阅下面的捕获。

enter image description here