我创建了简单的GUI,其中包含流程面板名称和ID main panel
,标签名称Label1
,文本框名称myTextBox
和ID为getETA
的按钮。
我的目标是,如果我在文本框中输入一个值,然后单击“提交”,则应在电子表格中写入值。 我的问题是脚本在电子表格中返回undefined而不是我输入的实际值。
var app = UiApp.createApplication();
app.setTitle("My Application");
app.add(app.loadComponent("MyGui"));
SpreadsheetApp.getActiveSpreadsheet().show(app);
var clickHandler = app.createServerHandler('clickGetETA');
clickHandler.addCallbackElement(app.getElementById('mainPanel'));
app.getElementById('getETA').addClickHandler(clickHandler);
var doc = SpreadsheetApp.getActive();
doc.show(app);
}
// this function responds to submit button
function clickGetETA(e) {
var app = UiApp.getActiveApplication();
var textBoxValue = e.parameter.myTextBox;
var sheet = SpreadsheetApp.getActiveSheet();
var lastRow = sheet.getLastRow()+1;
var lastCell = sheet.getRange("A"+lastRow);
lastCell.setValue(textBoxValue);
return app.close();
}
我是stackoverflow的新手,没有足够的声誉来发布图片所以张贴图片链接
答案 0 :(得分:0)
我看到您在GUI构建器中的脚本 AND 中定义了clickHandler ...这太多了,这可能是导致问题的原因
请尝试删除GUI构建器中的那个并再次测试,我在测试中没有看到任何其他问题; - )
您当然也可以删除脚本中的处理程序,但在这种情况下,您应该通过在处理程序名称附近开发小“+”并将面板放在那里来添加callbackelement。
编辑:抱歉,GUI构建器中有2个处理程序,因此两个太多了!你不能在2个不同的处理程序类型(click& key)上使用单个处理程序,如果你想在一个按钮上有多个处理程序,你应该定义你需要的多个处理程序,每种类型你想要的,最终调用功能相同但变量名称不同。
编辑2主函数开头的行SpreadsheetApp.getActiveSpreadsheet().show(app);
也不存在,只需删除它,因为稍后使用var doc = SpreadsheetApp.getActive();
调用电子表格
使用GUI here
工作代码 编辑3:问题已解决,通过共享提问工作表,面板名称未正确写入:脚本中的mainPanel
和GUI中的mainpanel
...
Aaaah,案例敏感! ;-)(在图像6中可见)