Я пытаюсь создать гистограмму (в Google Sheet), определяющую и агрегирующую разные серии.
Мне удалось создать разные серии (диапазоны), однако, как вы можете видеть, агрегация работаетчастично.По сути, он суммирует только первые 2 значения (строки).Если у серии есть 3 значения [абрикосы], функция будет агрегировать только первые 2
. Более того, цвета не связаны должным образом с нужными этапами.Я предполагаю, что функция «aggregatedValues» снова отвечает.
https://docs.google.com/spreadsheets/d/1FwDcJuBBsXsPMASxhKxUWDKxv55U5zFKnswtltRkjJA/edit#gid=0
//Different fruit definition
var fruit = ["Bananas", "strawberries", "Apricots", "Peas"]
var eachpair = fruit
//Agreggation of values based on fruit and add color for each stage
function aggregatefruit(range){
var count = 0
var aggregatedValues = []
var eachfruit = fruit
var eachValue = range
fruit.forEach(function (eachfruit){
count = 0
range.forEach(function (eachValue){
if(eachValue[0]==eachfruit)
{
count=count+1
}
})
if(count > 0){
aggregatedValues.push([eachfruit,count])
}
})
return aggregatedValues
}
//Different fruit definition
var fruit = ["Bananas", "Kiwi", "Apricots", "Peas"]
var eachpair = fruit
//Agreggation of values based on fruit and add color for each stage
function aggregatefruit(range){
var count = 0
var aggregatedValues = []
var eachfruit = fruit
var eachValue = range
fruit.forEach(function (eachfruit){
count = 0
range.forEach(function (eachValue){
if(eachValue[0]==eachfruit)
{
count=count+1
}
})
if(count > 0){
aggregatedValues.push([eachfruit,count])
}
})
return aggregatedValues
}
//Gets the color based on the different fruit
function getColor(fruit){
var color = "White";
var colorArray = [];
fruit.forEach(function(eachPair){
if (eachPair[0] == "Bananas"){color = "yellow";}
else if (eachPair[0] == "Kiwi"){color = "brown";}
else if (eachPair[0] == "Apricots"){color = "orange";}
else if (eachPair[0] == "Peas"){color = "green";}
colorArray.push(color)
})
return colorArray;
};
//Draws bar chart based on fruit
function createStageChart() {
var app = SpreadsheetApp;
var ss = app.getActiveSpreadsheet();
//Get current sheet
var sheet = ss.getActiveSheet()
//Get values for aggregation
var range = sheet.getRange("C3:D11")
var values = range.getValues().sort()
var aggregatedValues = aggregatefruit(values);
var colorfruit = getColor(aggregatedValues);
//Automatically creating several ranges per series
var position = 3
var index = 0
var chart =
sheet.newChart().asBarChart().setChartType(Charts.ChartType.BAR)
.setPosition(10, 10, 0, 0)
.setNumHeaders(0)
.build();
sheet.insertChart(chart)
aggregatedValues.forEach(function(eachfruit){
chart = chart.modify()
.addRange(sheet.getRange("C"+position.toString()+":D"+ .
(position+eachfruit[2]-1).toString()))
.setOption('applyAggregateData',index)
.build();
sheet.updateChart(chart);
index=index+1
position=position+eachfruit[2]
})
chart = chart.modify()
.setOption('applyAggregateData',0)
.build();
sheet.updateChart(chart);
}