Entonces, tengo una hoja que cubre un año de datos y un gráfico de barras que se actualiza en un activador para mostrar los datos de cada mes específicamente. También establece un color para cada una de las barras cuando se actualiza. El problema es que de la forma en que hice el cambio de color, siempre tiene el mismo color en cada posición, independientemente de cuál sea la etiqueta de la barra. (es decir, si está ordenado por valor descendente, si X tiene el número más bajo, es azul e Y es el segundo y rojo, etc. Luego, el próximo mes Y tiene menos, por lo que es el primero y azul, y X es rojo). Necesito configurar los colores según la etiqueta (por lo que X es azul independientemente de si tiene más o menos que Y en un mes determinado). Sin embargo, no puedo entender cómo hacer referencia a las etiquetas para establecer los colores.
Mi código para actualizar el gráfico y establecer los colores es:
function updateRangeBar(sheet, range, chart) { chart = chart.modify() .clearRanges() .addRange(range) .setOption('series.0.items.0.color', "red") .setOption('series.0.items.1.color', "blue") .setOption('series.0.items.2.color', "yellow") .setOption('series.0.items.3.color', "green") .setOption('series.0.items.4.color', "orange") .setOption('series.0.items.5.color', "black") .build() sheet.updateChart(chart); }Lo que me imagino que sería el código
function updateRangeBar(sheet, range, chart) { var redIndex, blueIndex, yellowIndex, greenIndex, orangeIndex, blackIndex for(i = 0; i < [chartBarItemsLength]; i++) { if([chartBarItemLabel] == "DataHeaderForRed") { redIndex = i } elseIf([chartBarItemLabel] == "DataHeaderForBlue") { blueIndex = i } } chart = chart.modify() .clearRanges() .addRange(range) .setOption('series.0.items.'+redIndex+'.color', "red") .setOption('series.0.items.'+blueIndex'+.color', "blue") .setOption('series.0.items.+yellowIndex'+.color', "yellow") .setOption('series.0.items.+greenIndex'+.color', "green") .setOption('series.0.items.+orangeIndex'+.color', "orange") .setOption('series.0.items.+blackIndex'+.color', "black") .build() sheet.updateChart(chart); }Donde [chartBarItemLabel] y [chartBarItemsLength] son lo que necesito ayuda para encontrar una manera de llegar.
Descubrí una respuesta, aunque mejores opciones siempre serían buenas.
function updateRangeBar(sheet, range, chart) { var subRange = range.getSheet().getRange(range.getRow(), range.getColumn(), range.getHeight(), 1) chart = chart.modify() .clearRanges() .addRange(range) .build() for(i = 0; i < subRange.getHeight(); i++) { var val = range.getSheet().getRange((subRange.getRow()+(i+1)), subRange.getColumn()).getValue() if(val.toString() == BLUE_TYPE) { chart = chart.modify().setOption('series.0.items.'+i+'.color', BLUE_RGB).build() } else if(val.toString() == RED_TYPE) { chart = chart.modify().setOption('series.0.items.'+i+'.color', RED_RGB).build() } else if( ... } sheet.updateChart(chart); }