我开发了一个从电子表格运行的应用程序。它有一个格式化的屏幕,即。 doc.show(应用程序 )。有一个质量变化功能。我想提示用户“你确定......还可以继续”。
理想的解决方案是弹出窗体,并且“可以继续”响应。
我找不到提醒用户并接受不同时取消格式化屏幕的响应的方法。
我知道必须有一个简单的方法来做到这一点。我搜索了这个论坛和其他人,但找不到适用于Google Spreadsheets的解决方案。
答案 0 :(得分:3)
使用GUI Builder时,我发现了一个非常简单的解决方案,即创建一个实际屏蔽整个UI(或部分UI)的面板或标签,这通常是不可见的。 当我看到它时,我可以点击它,它再次变得不可见,我又回到标准UI上。它使用GUI构建器中的功能来向后和向前移动元素,因此屏蔽非常容易(一种多层设计)。我想用脚本定义的UI可以实现相同的行为,但我不确定如何... 问候, 哔叽
编辑:有关信息:我只是使用这种技术设置了一个界面,我注意到已经隐藏的面板必须与其所有元素一起恢复,否则它们会重新显示为空。这里使用Clienthandler是一个示例,其中包含两个面板和两个执行此任务的按钮:
var panhandler0 = app.createClientHandler()
.forTargets(panel1).setVisible(false);// hide panel1 when button 'ENTER'on panel1 is pressed
enter.addClickHandler(panhandler0);
var panhandler1 = app.createClientHandler()
.forTargets(panel2,msg,grid2).setVisible(true);// show panel2 when button 'ENTER' on panel1 is pressed
enter.addClickHandler(panhandler1);
var panhandler2 = app.createClientHandler()
.forTargets(panel2,msg,grid2).setVisible(true);// re-show panel2 when button 'retry'on panel2 is pressed
retry.addClickHandler(panhandler2);
var panhandler3 = app.createClientHandler()
.forTargets(panel2).setVisible(false);// hide panel2 when button 'retry'on panel2 is pressed
retry.addClickHandler(panhandler3);
var panhandler4 = app.createClientHandler()
.forTargets(panel1,txt,grid,hpanel).setVisible(true);// re-show panel1 when button 'retry'on panel2 is pressed
很好用!
答案 1 :(得分:1)
您可以使用Browser.MsgBox()并在其中添加按钮以供用户确认。 参考网址 https://developers.google.com/apps-script/class_browser
答案 2 :(得分:0)
这确实不是一件容易的事。您必须使用自己的GUI(格式化屏幕)来显示消息。这样,您可以再次恢复GUI的状态。这是一个例子:
function uiTest() {
var app = UiApp.createApplication().setTitle("UI");
app.add(app.createGrid(1,1).setId('main'));
createGUI(app,{});
SpreadsheetApp.getActive().show(app);
}
function createGUI(app,p) {
var panel = app.createVerticalPanel();
var handler = app.createServerHandler('handler').addCallbackElement(panel);
panel.add(
app.createTextBox().setName('text').setId('text').setText(p.text ? p.text : "")).add(
app.createButton('Do it').addClickHandler(handler));
app.getElementById('main').setWidget(0,0, panel);
}
function handler(e) {
var app = UiApp.getActiveApplication();
var hidden = app.createHidden('oldValues', JSON.stringify(e.parameter));
app.getElementById('main').setWidget(0,0, app.createVerticalPanel().add(
hidden).add(
app.createLabel("Question message")).add(
app.createButton('Ok').addClickHandler(app.createServerHandler('after').addCallbackElement(hidden))));
return app;
}
function after(e) {
var app = UiApp.getActiveApplication();
createGUI(app,JSON.parse(e.parameter.oldValues));
return app;
}
难度将取决于您需要恢复多少状态。如果没有,那就更容易了。在此示例中,我将恢复文本框的值。您可以输入任何内容,以便在弹出窗口后显示它。