我开发了一个从电子表格运行的应用程序。它有一个格式化的屏幕,即。doc.show(应用程序)。有质量变化功能。我想提示用户“您确定...可以继续”。
理想的解决方案是带有“OK to continue”响应的弹出表单。
我找不到提示用户并接受不会同时删除格式化屏幕的响应的方法。
我知道必须有一个简单的方法来做到这一点。我搜索了这个论坛和其他论坛,但找不到适用于 Google 电子表格的解决方案。
我开发了一个从电子表格运行的应用程序。它有一个格式化的屏幕,即。doc.show(应用程序)。有质量变化功能。我想提示用户“您确定...可以继续”。
理想的解决方案是带有“OK to continue”响应的弹出表单。
我找不到提示用户并接受不会同时删除格式化屏幕的响应的方法。
我知道必须有一个简单的方法来做到这一点。我搜索了这个论坛和其他论坛,但找不到适用于 Google 电子表格的解决方案。
使用 GUI Builder 时,我发现了一个非常简单的解决方案,即创建一个面板或标签,它实际上掩盖了整个 UI(或它的一部分)并且通常是不可见的。当我让它可见时,我可以点击它,它再次变为不可见,我又回到了标准 UI。它使用 GUI 构建器中的功能来前后移动元素,因此遮罩非常容易(一种多层设计)。我想脚本定义的 UI 可以实现相同的行为,但我不确定如何......问候,Serge
编辑:有关信息:我刚刚使用这种技术设置了一个界面,我注意到必须恢复已变得不可见的面板及其所有元素,否则它们会重新出现空。此处使用 Clienthandlers 是一个示例,其中有两个面板和两个按钮来完成这项工作:
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
效果很好!
您可以使用 Browser.MsgBox() 并在其中添加按钮以供用户确认。参考网址 https://developers.google.com/apps-script/class_browser
这确实不是一件容易的事情。您必须使用自己的 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;
}
难度实际上取决于您需要恢复多少状态。如果没有,那就容易多了。在这个例子中,我恢复了文本框的值。您可以在那里输入任何内容,以查看它在弹出窗口后是否会出现。