它在charts dashboard tutorial中表示,信息中心可以绑定到Google电子表格范围作为数据源。但是在教程中没有证明这一点,我也无法在Apps Script docs中找到相关信息。似乎Datatable无法绑定到电子表格范围,因为这些方法仅提供手动添加行和列。
有谁知道如何将信息中心绑定到Google电子表格的范围?
在我目前的代码中,我假设仪表板可以绑定到Google Spreadsheet的范围,就像这样,但是setDataTable函数调用让我很难。
var ss = SpreadsheetApp.openById(spreadsheetId);
var data = ss.getRangeByName("DataWithColHeadings");
var dashboard = Charts.newDashboardPanel()
.setDataTable(data) // throws error here! I think it is expecting a DataTableBuilder
.bind([durationFilter, lineFilter], [pieChart, tableChart])
.build();
答案 0 :(得分:2)
您可以使用点表示法指定数据范围:
var datasource = ss.getSheetByName("SheetName").getRange("A1:J20");
然后按如下方式使用它:
var dashboard = Charts.newDashboardPanel()
.setDataTable(**datasource**)
以这种方式使用时,可以删除指定列名和行值的代码。只需确保指定范围内的值一致且非空。
答案 1 :(得分:0)
这相当于绑定到电子表格中命名范围的教程。命名范围包括列标题。
function doGet() {
var uiApp = UiApp.createApplication();
var ssKey = "0At0FGJizRd-gdFo5bWZUUFRrUnRabENiRFdmT2o4WUE";
var ss = SpreadsheetApp.openById(ssKey);
var datasource = ss.getRangeByName("myRange").getValues();
Logger.log(datasource);
var data = Charts.newDataTable()
.addColumn(Charts.ColumnType.STRING, datasource [0] [0])
.addColumn(Charts.ColumnType.STRING, datasource [0] [1])
.addColumn(Charts.ColumnType.NUMBER, datasource [0] [2])
.addColumn(Charts.ColumnType.NUMBER, datasource [0] [3])
for (i=1;i<=datasource.length-1;i++){
Logger.log(datasource [i]);
data.addRow([datasource [i] [0], datasource [i] [1], datasource [i] [2], datasource [i] [3]])
};
data.build();
var ageFilter = Charts.newNumberRangeFilter()
.setFilterColumnLabel("Age")
.build();
var genderFilter = Charts.newCategoryFilter()
.setFilterColumnLabel("Gender")
.build();
var pieChart = Charts.newPieChart()
.setDataViewDefinition(Charts.newDataViewDefinition()
.setColumns([0,3]))
.build();
var tableChart = Charts.newTableChart()
.build();
var dashboard = Charts.newDashboardPanel()
.setDataTable(data)
.bind([ageFilter, genderFilter], [pieChart, tableChart])
.build();
dashboard.add(uiApp.createVerticalPanel()
.add(uiApp.createHorizontalPanel()
.add(ageFilter).add(genderFilter)
.setSpacing(70))
.add(uiApp.createHorizontalPanel()
.add(pieChart).add(tableChart)
.setSpacing(10)));
uiApp.add(dashboard);
return uiApp;
}
答案 2 :(得分:0)
您还可以使用名为.getDataTable()的对象RANGE的API函数。以下示例适用于我的双列多行表。
function doGet() {
var uiApp = UiApp.createApplication().setTitle("My Dashboard");
var dataRange = sheet.getDataRange();
var dataTable = dataRange.getDataTable(true);
var catFilter = Charts.newCategoryFilter()
.setFilterColumnLabel("Category")
.build();
var chart = Charts.newPieChart()
.build();
var dashboard = Charts.newDashboardPanel()
.setDataTable(dataTable)
.bind([catFilter], [chart])
.build();
var panel = uiApp.createVerticalPanel()
.add(chart)
.add(catFilter);
dashboard.add(panel);
uiApp.add(dashboard);
return uiApp;
}
答案 3 :(得分:0)
附件是一个示例,其中Applescript直观地获取从谷歌电子表格中第一张工作表的单元格A1开始的数据范围。
这是我的第一个stackoverflow答案,所以请提供反馈
我已经重新创建了谷歌饼图Applescript dashboard tutorial,用于引用下面的电子表格:
function doGet() {
var uiApp = UiApp.createApplication();
// type the SpreadsheetKey below within quotes for
// example "1MfXR_ELFevumQwEOjWneNL5j2M8aVLgELBOsS41LD5o"
var ssKey = "1MfXR_ELFevumQwEOjWneNL5j2M8aVLgELBOsS41LD5o";
var ss = SpreadsheetApp.openById(ssKey);
var dataRange = ss.getDataRange();
var data = dataRange.getDataTable(true);
var ageFilter = Charts.newNumberRangeFilter()
.setFilterColumnLabel("Age")
.build();
var genderFilter = Charts.newCategoryFilter()
.setFilterColumnLabel("Gender")
.build();
var pieChart = Charts.newPieChart()
.setDataViewDefinition(Charts.newDataViewDefinition()
.setColumns([0,3]))
.build();
var tableChart = Charts.newTableChart()
.build();
var dashboard = Charts.newDashboardPanel()
.setDataTable(data)
.bind([ageFilter, genderFilter], [pieChart, tableChart])
.build();
dashboard.add(uiApp.createVerticalPanel()
.add(uiApp.createHorizontalPanel()
.add(ageFilter).add(genderFilter)
.setSpacing(70))
.add(uiApp.createHorizontalPanel()
.add(pieChart).add(tableChart)
.setSpacing(10)));
uiApp.add(dashboard);
return uiApp;
}