GUI应用程序脚本,返回“未定义”值

时间:2012-08-27 15:49:39

标签: google-apps-script gui-builder

我创建了简单的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的新手,没有足够的声誉来发布图片所以张贴图片链接

image1  image2  image3  image4  image5  image6  image7

1 个答案:

答案 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中可见)