如何删除谷歌图表并将其替换为谷歌应用程序中的新图表?

Her*_*191 2 google-apps-script

我到处搜索,我无法想出解决方案.每次用户点击"提交"(该部分有效)时,我都会尝试使此代码显示图表.问题出在用户点击提交多次一次.它多次显示图表.如何删除最后一个图表并使用新图表进行更新?

function doGet() {
  var uiApp = UiApp.createApplication().setTitle("some title");

  var grid = uiApp.createGrid(3, 2);
  grid.setWidget(0, 0, uiApp.createLabel('Lablel 1'));
  grid.setWidget(1, 0, uiApp.createLabel('Lablel 2'));

  var panel = uiApp.createVerticalPanel();

  panel.add(grid);

  var button = uiApp.createButton('submit');
  var handler = uiApp.createServerHandler('b');
  handler.addCallbackElement(grid);
  button.addClickHandler(handler);

  panel.add(button);
  uiApp.add(panel);

  return uiApp;
 }

function b(e) {
  var app = UiApp.getActiveApplication();

  //gets all my chart data
  var chart = getchartdata()

  //Add chart
  app.add(chart)

  var uiApp = UiApp.getActiveApplication();
  uiApp.close();

  return uiApp;
}
Run Code Online (Sandbox Code Playgroud)

Sri*_*rik 5

最简单的方法是为图表设置一个单独的面板,并在每次添加图表之前清除它.VerticalPanel小部件还有一个可以使用的删除方法.请参阅下面的代码,了解我建议的第一个选项

function doGet(){
  /* All your other code here */
  uiApp.add(panel);
  var chartPanel = uiApp.createVerticalPanel().setId('chartPanel'); 
  uiApp.add(chartPanel);

  return uiApp;
}

function b(e) {
  var app = UiApp.getActiveApplication();

  //gets all my chart data
  var chart = getchartdata()

  /* Clear chart Panel */
  var chartPanel = app.getElementById('chartPanel');
  chartPanel.clear(); 

  //Add chart
  chartPanel.add(chart)

  var uiApp = UiApp.getActiveApplication();
  uiApp.close();

  return uiApp;
}
Run Code Online (Sandbox Code Playgroud)

PS:我不确定为什么你有两个不同的变量app和uiApp同样的东西.虽然不是你的情况,但它可能导致混乱和问题.