我正在尝试使用来自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()
函数不起作用?
答案 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.
上显示的示例按照您的评论编辑:使用此确切代码进行测试(复制/粘贴)并正常工作,请参阅下面的捕获。