来自格式化屏幕的用户确认

时间:2012-05-12 14:25:03

标签: google-apps-script

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

理想的解决方案是弹出窗体,并且“可以继续”响应。

我找不到提醒用户并接受不同时取消格式化屏幕的响应的方法。

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

3 个答案:

答案 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;
}

难度将取决于您需要恢复多少状态。如果没有,那就更容易了。在此示例中,我将恢复文本框的值。您可以输入任何内容,以便在弹出窗口后显示它。