0

我正在尝试使用Romain Vialard 和 James Ferreira 书中的Google Apps 脚本建议框库在我的 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()为其他函数,这个其他函数运行正常)。我已经安装了 Suggest Box 库。那么,为什么该doGet()功能不起作用?

4

1 回答 1

1

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

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

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

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 网站上显示的示例。

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

在此处输入图像描述

于 2013-11-09T09:26:57.270 回答