0

我创建了一个简单的 GUI,其中包含一个流面板名称和 ID main panel、一个标签名称、Label1一个文本框名称myTextBox和一个带有 ID 的按钮getETA

我的目标是,如果我在文本框中输入一个值并单击提交,则该值应写入电子表格。我的问题是脚本在电子表格中返回未定义而不是我输入的实际值。

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 的新手,没有足够的声誉来发布图片,所以发布图片的链接

图像 1 图像2 图像3 图像4 图像5 图像 6 图像 7

4

1 回答 1

0

我看到您在脚本GUI 构建器中定义了 clickHandler ......这太过分了,这可能是问题的原因

请尝试删除 GUI builder 中的那个并再次测试,我在您的测试中没有看到任何其他问题 ;-)

当然,您也可以删除脚本中的处理程序,但在这种情况下,您也应该在其中添加回调元素,方法是在处理程序名称附近开发 smal '+' 并将您的面板放在那里。

编辑:抱歉,GUI 构建器中有 2 个处理程序,所以这两个太多了!如果您想在一个按钮上有多个处理程序,则不能在 2 个不同的处理程序类型(单击和键)上使用具有单个名称的单个处理程序,您应该定义所需数量的处理程序,每种类型的处理程序,最终调用相同函数,但具有不同的变量名称。

编辑 2SpreadsheetApp.getActiveSpreadsheet().show(app);主函数开头的行也不存在,只需将其删除,因为您稍后调用电子表格var doc = SpreadsheetApp.getActive();

在此处使用 GUI 的工作代码

编辑 3:通过共享提问表解决了问题,面板名称未正确写入:mainPanel在脚本和mainpanelGUI 中...... Aaaah,区分大小写!;-)(在图 6 中可见)

于 2012-08-27T16:30:15.573 回答