【问题标题】:Google sheets: How to dynamically change the color of bar chart based on cell value with google script?谷歌表格:如何使用谷歌脚本根据单元格值动态更改条形图的颜色?
【发布时间】:2020-03-24 19:41:33
【问题描述】:

我在 excel 上制作了一个甘特图(见屏幕截图),我试图弄清楚如何根据受让人(团队成员)动态更改条形的颜色。作为参考,这只是一个堆积条形图,其中列的第一部分只是透明的。有 2 个系列:“Start on day” - 透明,“Duration” - 浅蓝色。

正如你现在所看到的,所有的条都是相同的颜色,而我想要这样的东西:

所以我找到了this 一段代码,我对其进行了一些编辑,并设法使其工作,以便当我在团队成员列中更改名称时,它会以不同的方式为图表着色(本质上它会收到一个 CSS隐藏列中的颜色代码)。问题是,它会为所有条形着色(因为它针对的是一系列),而不仅仅是一个。我找不到一种方法让它只用一个酒吧。

建议?任何帮助深表感谢。 (代码如下)

function modifyChart_(sheet, newCssColor) {
  // Assume there is only one chart on this sheet.
  const charts = sheet.getCharts();
  const barBuilder = charts[0].modify().asBarChart();
  const option = {};

  option[0] = {"color": "rgba(255,255,255, 0"};
  option[1] = {};
  option[2] = {"color": newCssColor};
  barBuilder.setOption("series", option);

  // Update the chart on the sheet.
  sheet.updateChart(barBuilder.build());
}

【问题讨论】:

    标签: google-apps-script google-sheets google-visualization


    【解决方案1】:

    如何静态设置条形图的颜色

    示例:

    function modifyChart(sheet, newCssColor) {
      // Assume there is only one chart on this sheet.
      var sheet = SpreadsheetApp.getActive().getActiveSheet();
      const charts = sheet.getCharts();
      const barBuilder = charts[0].modify().asBarChart().setColors(["red", "green", "grey"]);
       sheet.updateChart(barBuilder.build());
    }
    

    注意:

    • Apps 脚本不支持函数名末尾的下划线_
    • 更改条形颜色最方便的方法是setColors

    如何根据单元格值动态设置条形图的颜色

    示例:

    function modifyChart(sheet, newCssColor) {
      // Assume there is only one chart on this sheet.
      var sheet = SpreadsheetApp.getActive().getActiveSheet();
      const charts = sheet.getCharts();
      var array = [];
      //assuming the color values are in cells A10, A11 and A12
      var colorValues = sheet.getRange("A10:A12").getValues();
      for(var i = 0; i < colorValues.length; i++){
        array.push(colorValues[i][0]);
      }
      const barBuilder = charts[0].modify().asBarChart().setColors(array);
      sheet.updateChart(barBuilder.build());
    }
    

    参考资料:

    【讨论】:

    • 这似乎适合我的情况,我今晚会测试。一个问题:有没有办法使范围动态?比如,我添加了一个新任务,就是一个新行,所以颜色范围现在是从第 10 行到第 13 行。如果我做一个数据表并引用它的长度呢?
    • 添加新任务是指在图表中添加新列?您可以使用getDataRange 动态访问范围的长度(在这种情况下,如果您的颜色表与图表位于单独的工作表中,则很方便)。此外,您可以使用setColors 分配比图表中的列更多的颜色。图表构建器将使用的数组中的值的数量对应于列的数量,其余的值将被忽略,直到您添加更多的列。
    • 不,我的意思是一个新行,就像甘特图的一个新任务,所以是一个额外的行。我设法使您的脚本正常工作,但由于某种原因,它仍然为所有条着色,而不仅仅是一个。我怀疑它引用了数据列?
    • 所以,根据this 线程上的 cmets,似乎 setColor 和 setOptions 都只适用于系列,要对单个元素进行不同的着色,我可能需要制作某种数据透视表。
    • 是的,就是这个想法,很抱歉一开始就不清楚。我求助于制作原始数据的数据透视表,本质上是对其进行转置并按团队成员分组。所以系列变成了行并被倒置,现在每个任务都是不同的系列。我敢打赌,这样我就可以给它们涂上不同的颜色。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-10
    • 1970-01-01
    • 2013-04-28
    • 1970-01-01
    • 2017-04-28
    • 2018-10-27
    • 2012-12-02
    相关资源
    最近更新 更多