Google apps script 从格式化屏幕进行用户确认

Google apps script 从格式化屏幕进行用户确认,google-apps-script,Google Apps Script,我开发了一个从电子表格运行的应用程序。它有一个格式化的屏幕,即doc.show(应用程序 ).有一个质量变化函数。我想提示用户“你确定。。。“好,继续” 理想的解决方案是一个带有“OK to continue”响应的弹出式表单 我无法找到一种方法来提示用户并接受一个不会同时关闭格式化屏幕的响应 我知道一定有一个简单的方法可以做到这一点。我搜索了这个论坛和其他论坛,但找不到适用于谷歌电子表格的解决方案。您可以使用Browser.MsgBox()并在其中添加按钮以供用户确认。 引用URL 您可以使用

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

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

我无法找到一种方法来提示用户并接受一个不会同时关闭格式化屏幕的响应

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

您可以使用Browser.MsgBox()并在其中添加按钮以供用户确认。 引用URL

您可以使用Browser.MsgBox()并在其中添加按钮以供用户确认。 引用URL
这确实不是一件容易的事。您必须使用自己的GUI(格式化屏幕)来显示消息。通过这种方式,您可以再次恢复GUI的状态。以下是一个例子:

函数uiTest(){
var app=UiApp.createApplication().setTitle(“UI”);
app.add(app.createGrid(1,1.setId('main'));
createGUI(应用程序,{});
SpreadsheetApp.getActive().show(应用程序);
}
函数createGUI(应用程序,p){
var panel=app.createVerticalPanel();
var handler=app.createServerHandler('handler').addCallbackElement(面板);
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,面板);
}
函数处理程序(e){
var app=UiApp.getActiveApplication();
var hidden=app.createHidden('oldValues',JSON.stringify(e.parameter));
app.getElementById('main').setWidget(0,0,app.createVerticalPanel().add(
隐藏)。添加(
app.createLabel(“问题消息”)。添加(
app.createButton('Ok').addClickHandler(app.createServerHandler('after').addCallbackElement(隐藏));
返回应用程序;
}
(e)之后的函数{
var app=UiApp.getActiveApplication();
createGUI(app,JSON.parse(e.parameter.oldValues));
返回应用程序;
}

困难实际上取决于需要恢复多少状态。如果没有,那就容易多了。在本例中,我恢复了textbox的值。您可以在那里键入任何内容,以查看它将在弹出窗口后出现。

这确实不是一件容易的事情。您必须使用自己的GUI(格式化屏幕)来显示消息。通过这种方式,您可以再次恢复GUI的状态。以下是一个例子:

函数uiTest(){
var app=UiApp.createApplication().setTitle(“UI”);
app.add(app.createGrid(1,1.setId('main'));
createGUI(应用程序,{});
SpreadsheetApp.getActive().show(应用程序);
}
函数createGUI(应用程序,p){
var panel=app.createVerticalPanel();
var handler=app.createServerHandler('handler').addCallbackElement(面板);
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,面板);
}
函数处理程序(e){
var app=UiApp.getActiveApplication();
var hidden=app.createHidden('oldValues',JSON.stringify(e.parameter));
app.getElementById('main').setWidget(0,0,app.createVerticalPanel().add(
隐藏)。添加(
app.createLabel(“问题消息”)。添加(
app.createButton('Ok').addClickHandler(app.createServerHandler('after').addCallbackElement(隐藏));
返回应用程序;
}
(e)之后的函数{
var app=UiApp.getActiveApplication();
createGUI(app,JSON.parse(e.parameter.oldValues));
返回应用程序;
}

困难实际上取决于需要恢复多少状态。如果没有,那就容易多了。在本例中,我恢复了textbox的值。您可以在那里键入任何内容,以查看它将在弹出窗口后出现。

使用GUI Builder时,我发现了一个非常简单的解决方案,即创建一个面板或标签,该面板或标签实际上屏蔽了整个UI(或其一部分),并且通常是不可见的。 当我让它可见时,我可以点击它,它再次变为不可见,我又回到了标准用户界面。它使用GUI builder中的功能来前后移动元素,因此屏蔽非常简单(一种多层设计)。我猜同样的行为可以通过脚本定义的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

很好用

使用GUI Builder时,我发现了一个非常简单的解决方案,即创建一个面板或标签,该面板或标签实际上屏蔽了整个UI(或其一部分),并且通常是不可见的。 当我让它可见时,我可以点击它,它再次变为不可见,我又回到了标准用户界面。它使用GUI builder中的功能来前后移动元素,因此屏蔽非常简单(一种多层设计)。我猜同样的行为可以通过脚本定义的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

很好用

这是行不通的。浏览器启动后未还原UiApp实例。msgbox此操作不起作用。UiApp实例在浏览器之后不会恢复。MSGBox在顶部放置一个面板确实非常聪明。Serge,你能告诉我如何像上面那样在注释中包含程序代码吗。非常感谢。哦我好像说不清楚。在这个评论框中,我甚至不能创建换行符。我想展示一下