如何更新Google可视化信息中心的基础Google数据表并刷新信息中心视图?

时间:2016-05-16 00:17:01

标签: google-apps-script google-visualization google-chartwrapper google-datatable

我使用Google HTML服务创建了一个Google可视化信息中心。底层数据表(jjdt)从几个数据表(如jadt2,fa)连接起来。

jjdt = google.visualization.data.join(jadt2,fa,'left',[[0,0]],[1,2,3,4,5,6,7,8,9,10,11],[2,3]);   

然后我创建了一个图表包装器(finalTable)来显示仪表板中的表格。

    finalTable = new google.visualization.ChartWrapper({
    'chartType': 'Table',
    'containerId': 'table-div',
    'options': {
      'showRowNumber': false, 
      'width': '100%', 
      'height': '100%', 
      'allowHtml': true, 
      'pageSize': 20
    }
  });

dashboard.bind(wwPicker, [finalTable]);
dashboard.draw(jjdt);

这些代码运行正常。

现在我要做的是允许单击按钮将基础表(jjdt)中的某些单元格设置为新值,并将其反映在仪表板上。但这并不像我想象的那么简单。

我尝试了两件事:

1)使用javascript更新相应单元格(x,y)的jjdt表并调用finalTable.draw();

    jjdt.setCell(x,y,'New Value');
    finalTable.draw();

但这没有效果,也没有错误信息。

2)我想也许图表包装器创建了一个数据表副本。所以我试着恢复那个数据表:

 var mydt = finalTable.getDataTable();
 mydt.setCell(x,y,'New Value');
 finalTable.draw();

我认为这是文档https://developers.google.com/chart/interactive/docs/reference#methods_4

中描述的正确方法

documentation

但是,我收到一条错误消息,说即使我可以调用mydt.getValue(),setCell也不是mydt的函数。好像我的数据表“以某种方式”只读?但它是一个DataTable而不是DataView ..为什么会这样?

enter image description here

2 个答案:

答案 0 :(得分:0)

仪表板需要知道修改后的dataTable,所以我在解决方案中添加了一行1)

jjdt.setCell(x,y,'New Value');
dashboard.draw(jjdt); // added line
finalTable.draw();

解决方案2)不起作用,因为getDataTable()是ChartWrapper类的方法,它不是Dashboard类的方法,因此你的“不是函数”错误消息。

答案 1 :(得分:0)

我尝试了PaulH的建议,但它仍然无效。

但经过一番深挖,我终于找到了解决方案。问题是我调用SetCell的方式不会更新"格式化的值"细胞这就是为什么即使我认为我更新了表格单元格"值",它的格式与以前一样。

正确的做法是:

jjdt.setCell(x,y,'New Value','New Display Value');

这种方式只有"新显示价值"将显示在表格图表中。但图表将根据" New Value"进行排序。

此外,要更新视图,似乎要么调用

dashboard.draw(jjdt)

finalTable.draw()

会产生同样的效果。所以我只使用finalTable.draw()更新表。

希望这有助于他人。