我创建了一个带有流程面板(MyGui
)的GUI(mainPanel
),一个文本框(textValue
)和一个按钮(getETA
)。全部在网站脚本中。
我们的想法是在文本框中输入一个值,点击该按钮,然后将值放在电子表格的单元格A1中。
GUI中没有配置处理程序,我将脚本复制粘贴到新网站,但没有成功。
我遇到的问题是我在电子表格单元格中获得的所有内容都是“未定义”。
此外,如果我在clickGetETA
函数上运行调试,我会收到以下错误消息:“无法读取属性”参数“来自未定义”
我是新手,但我最好的猜测是GUI的细节没有传递给clickGetETA
函数。我已经搜索了我能找到的但我似乎无法找到解决方案......
如果有人能告诉我哪里出错了,我会很感激他的帮助。
function doGet() {
var app= UiApp.createApplication();
app.add(app.loadComponent("MyGui"));
var clickHandler = app.createServerHandler('clickGetETA');
clickHandler.addCallbackElement(app.getElementById('mainPanel'));
app.getElementById('getETA').addClickHandler(clickHandler);
return app;
}
function clickGetETA(e) {
var sheet = SpreadsheetApp.openById('abcdefghjklmnopqrstuvwxyz');
var ss = sheet.getActiveSheet();
var target = ss.setActiveCell("A1");
target.setValue(e.parameter.textValue);
}
答案 0 :(得分:2)
变化:
var ss = sheet.getActiveSheet();
var target = ss.setActiveCell("A1");
致:
var ss = sheet.getSheetByName("SheetName");
var target = ss.getRange("A1");
这种事情的好例子在这里: https://developers.google.com/apps-script/guide_user_interfaces
它应该作为服务运行。即你使用get函数。
注意:调试时“e”参数不存在。调试有点受限。 ActiveSheet和ActiveCell旨在从电子表格而非服务中使用。 服务会创建一个网页而不是一个弹出框。
涡流。
答案 1 :(得分:0)
addCallbackElement
中使用的回调元素可以是单个窗口小部件,也可以是GUI的面板。传递面板时,面板层次结构中的所有窗口小部件都将包含在参数中。您确定自己的文本框位于要添加的面板中吗?
此外,可以使用窗口小部件name
(您必须在GUI构建器上设置)在处理函数中访问窗口小部件的值。请注意name
和id
之间的区别,用于使用getElementById
获取小部件的ID,以及确定事件的小部件source
时使用相同的内容多个小部件的处理程序。以及name
用于访问该值。您确定将文本框命名为textValue
吗?
答案 2 :(得分:0)
为我修复的是进入UI编辑器并确保为表单字段和名称分配了ID。我错过了这个名字所以我的e.parameter.fieldName未定义。