我尝试使用谷歌应用程序脚本构建一个简单的仪表板应用程序从谷歌电子表格中提取数据,然后使用仪表板上的图表直观显示该数据。
我已设法执行这些初始步骤,但在尝试对数据进行分组时遇到问题,以防止将饼图中的多个切片分配给同一任务。在下面的源电子表格中,您会看到"支持"的大量条目。任务(列E)链接到不同的客户端(列B)。我需要的是根据"任务"对数据进行分组。列(E)所以记录在G列(小时)中的时间条目总计并相应地显示(即每个任务的饼图的一个部分,无论客户端如何)。
我搜索过应用程序脚本文档并且基本上已经迷失在噪音中,并且无法在Apps脚本中找到任何明确的方法。我发现了一些关于可能使用Google Visualization来实现类似功能的信息,但我正在努力实现如何实施,因为那里有太多相互矛盾的文档。
基本上我问这是否可以直接在Apps脚本中直接查询数据并生成另一张表(作为图表的基础),或者如果没有那么最简单和/或最好的方法是什么?
数据来源: https://docs.google.com/spreadsheets/d/1Gvqe89ytJxrKWOvGJWX5heYwrj5L-MP_Pe2jpTqqB5o/edit?usp=sharing
当前应用程序显示如下:
应用脚本代码:
function doGet() {
var ss = SpreadsheetApp.openById('1Gvqe89ytJxrKWOvGJWX5heYwrj5L-MP_Pe2jpTqqB5o');
var data = ss.getDataRange();
var taskFilter = Charts.newCategoryFilter().setFilterColumnIndex(4).build();
var clientFilter = Charts.newStringFilter().setFilterColumnIndex(1).build();
var tableChart = Charts.newTableChart()
.setDataViewDefinition(Charts.newDataViewDefinition().setColumns([1,2,4,6]))
.build();
var pieChart = Charts.newPieChart()
.setDataViewDefinition(Charts.newDataViewDefinition().setColumns([4,6]))
.build();
var dashboard = Charts.newDashboardPanel().setDataTable(data)
.bind([taskFilter, clientFilter], [tableChart, pieChart])
.build();
var app = UiApp.createApplication();
var filterPanel = app.createVerticalPanel();
var chartPanel = app.createHorizontalPanel();
filterPanel.add(taskFilter).add(clientFilter).setSpacing(10);
chartPanel.add(tableChart).add(pieChart).setSpacing(10);
dashboard.add(app.createVerticalPanel().add(filterPanel).add(chartPanel));
app.add(dashboard);
return app;
}