男
在Google表格中,有两个复选框,名为“使用第1行作为标题”和“聚合列”,我通常用它来创建饼图。现在,我想通过Google Scripts进行相同的编程。
有人可以帮帮我吗?
由于 多利亚
答案 0 :(得分:0)
我概述了示例代码,它可以智能地聚合饼图的数组项目计数。
我个人不喜欢和讨厌这种并发症,因为Google似乎限制并定义了EmbeddedPieChartBuilder图表数据输入作为矩阵变量,这些变量只能来自Sheet" Range"因此,用户没有其他选择,只能强制将图表绘图值范围分配给最少两列矩阵。 Chart的默认标准DataTable商品也不能用作图输入。
如果图表要发布为网络,只需使用Charts.newPieChart()语法
function newChart() {
var sheet= SpreadsheetApp.getActive().getSheetByName('sourcedata');
var range = sheet.getRange("A1:A6");
var rows=range.getNumRows();
var cols=range.getNumColumns();
var varr=[]; // To Store number of items in your range
var cnt_varr={}; // TO store and aggregate total item count
var chk_item="";
array_cnt=-1;
// build up the datatable;
// row start is at 2 since row 1 is Title
for (var vrow=2;vrow<rows+1;vrow++){
var vitem=range.getCell(vrow, cols).getValue();
if (vitem!=chk_item){
cnt=cnt_varr[vitem];
if (cnt==null){
// only add new item to array
varr.push(vitem);
}
chk_item=vitem;
}
var cnt=0;
cnt=cnt_varr[vitem];
if (cnt==null){
cnt=0;
}
var val_cnt=parseInt(cnt);
val_cnt=val_cnt+1;
// intelligently aggregate the array item count
cnt_varr[vitem]=val_cnt;
}
// write the output result to new sheet
var new_sheet= SpreadsheetApp.getActive().getSheetByName('output');
if (new_sheet==null){
SpreadsheetApp.getActiveSpreadsheet().insertSheet().setName("output");
}
new_sheet= SpreadsheetApp.getActive().getSheetByName('output');
var row_ToAdd=varr.length;
for (var i=0;i<row_ToAdd;i++){
new_sheet.getRange(i+1,1).setValue(varr[i]);
new_sheet.getRange(i+1,2).setValue(cnt_varr[varr[i]]);
}
// PieChartBuilder
var chartBuilder = new_sheet.newChart().asPieChart()
.addRange(new_sheet.getRange(1, 1, row_ToAdd, 2))
.setChartType(Charts.ChartType.PIE)
.setPosition(5, 5, 0, 0)
.build();
//Show the pieChart
if (new_sheet.getCharts().length>0){
new_sheet.getCharts().pop();
} else{
new_sheet.insertChart(chartBuilder);
}
}
答案 1 :(得分:0)
我修改了示例,以便可以使用新值刷新
动态更新现有图表 if (new_sheet.getCharts().length>0){
var xcht=new_sheet.getCharts()[0];
xcht=xcht.modify()
.addRange(new_sheet.getRange(1, 1, row_ToAdd, 2))
.setChartType(Charts.ChartType.PIE)
.setPosition(5, 5, 0, 0)
.build()
new_sheet.updateChart(xcht);
// new_sheet.getCharts().pop();
} else{
new_sheet.insertChart(chartBuilder);
}
答案 2 :(得分:0)