0

我开发了一个从电子表格运行的应用程序。它有一个格式化的屏幕,即。doc.show(应用程序)。有质量变化功能。我想提示用户“您确定...可以继续”。

理想的解决方案是带有“OK to continue”响应的弹出表单。

我找不到提示用户并接受不会同时删除格式化屏幕的响应的方法。

我知道必须有一个简单的方法来做到这一点。我搜索了这个论坛和其他论坛,但找不到适用于 Google 电子表格的解决方案。

4

3 回答 3

3

使用 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

效果很好!

于 2012-05-13T13:12:24.437 回答
1

您可以使用 Browser.MsgBox() 并在其中添加按钮以供用户确认。参考网址 https://developers.google.com/apps-script/class_browser

于 2012-05-12T14:46:44.223 回答
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;
}

难度实际上取决于您需要恢复多少状态。如果没有,那就容易多了。在这个例子中,我恢复了文本框的值。您可以在那里输入任何内容,以查看它在弹出窗口后是否会出现。

于 2012-05-12T15:09:39.167 回答