2

我到处搜索我无法想出解决方案。我试图让此代码在每次用户单击“提交”时显示一个图表(该部分有效)。问题出现在用户点击提交不止一次。它多次显示图表。我如何让它删除最后一个图表并用新的图表更新它?

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;
}
4

2 回答 2

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

PS:我不确定为什么同一件事有两个不同的变量 app 和 uiApp 。尽管不是您的情况,但它可能会导致混乱和问题。

于 2012-09-02T07:03:59.933 回答
0

注意到这个问题现在已经有六年了,我的回答更多地适用于从Sheet对象中删除图表,而不是从 a 中的面板中删除图表UiApp,尤其是UiApp已弃用的图表:

“警告:UI 服务已于 2014 年 12 月 11 日弃用。要创建用户界面,请改用 HTML 服务。”

此答案不适用于删除插入HtmlServiceHTML 对话框的图表。

因此,对于那些想要从Sheet对象中删除图表的读者来说,下面的代码非常有用:

function deleteAllChartsFromSheet(sheetName) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var chartsSheet = ss.getSheetByName(sheetName); // TODO: validate param sheetName
  var n = chartsSheet.getCharts().length;
  for (var i = n-1; i >= 0; i--) {  // note: delete them in reverse order!
    var chart = chartsSheet.getCharts()[i];
    chartsSheet.removeChart(chart);
  }
}
于 2018-09-18T18:40:45.467 回答