我正在尝试使用来自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
答案 0 :(得分:1)
onEdit是一个简单的触发器,如果您阅读documentation,您将了解到“他们无法访问任何需要以该用户身份验证的服务。”
您的doGet
函数使用ContactsApp
,这就是它无声地失败的原因。
使用其他名称并设置要求授权的installable on Edit trigger
。也就是说,它不会向您的电子表格返回任何数据(如前面提到的here,并仔细阅读有关可安装触发器的章节。)
另请参阅this doc有关serverHandlers以及如何在UiApp中实现它的信息。