可以将图表转换为和嵌入式图表吗?

时间:2019-05-11 17:42:01

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

我试图从一个数据表中创建一些图表,但是这些图表正在获取某种特定的数据,因此我发现使用DataTableBuilder类是有利的。与原始工作表相比,我能够更轻松地为数据指定标签。但是,我无法将图表类嵌入到工作表中。我是否试图将图表转换为EmbeddedChart或使用DataTable创建EmbeddedChart?我正在尝试从数据表中创建一些图表,但这些图表正在捕获某种特定数据,因此我已经找到了使用DataTableBuilder类的优势。与原始工作表相比,我能够更轻松地为数据指定标签。但是,我无法将图表类嵌入到工作表中。是否可以将图表转换为EmbeddedChart或使用DataTable创建EmbeddedChart?

这是下面的数据,我只需要最后一列(5/11),就不需要总行。所以它不是一个简洁的范围,否则我将只使用嵌入式图表构建器。

    May          5/1    5/2 5/3 5/11    
    Critical       0    0   0   0   
    High           0    0   0   0   
    Call Immediate  4   11  4   3   
    Daytime Call    3   3   6   1   
    Totals         7    14  10  4   

下面是我构建Chart的方式,其中dailyTotals的范围为[0,0,3,1]。这可以正常工作,但我无法标记任何内容。

      var dailyChart = LOB.newChart()
        .setChartType(Charts.ChartType.BAR)
        .setOption('title', LOB.getName())
        .addRange(dailyTotals)
        .build();
      LOB.insertChart(dailyChart);

在下面建立数据表时,这次的每日总计只是一个数组。但这给了我标签。

    dailyTable = Charts.newDataTable()
     .addColumn(Charts.ColumnType.STRING, "Priority")
     .addColumn(Charts.ColumnType.NUMBER, "Incidents")
     .addRow('P1', dailyTotals[0])
     .addRow('P2', dailyTotals[1])
     .addRow('P3', dailyTotals[2])
     .addRow('P4', dailyTotals[3])
    .build();

如何使用DataTable创建EmbeddedChart?或如何将图表转换为嵌入式图表?

2 个答案:

答案 0 :(得分:1)

您需要在工作表中的其他位置重新创建以下范围,并将其添加为范围。

A  B
P1 0   
P2 0   
P3 3   
P4 1   

范围[P1,P2,P3,P4]也可以在其他位置。然后,您可以添加两个范围:

.addRange([P1 to P4 range])
.addRange(dailyTotals)
.setOption('useFirstColumnAsDomain','true')

答案 1 :(得分:1)

在得到任何人的回应之前,我实际上想出了一个对我有用的解决方案。它涉及使用图例来确定哪个条,而不是沿着x轴的标签,但是它完全满足了我的要求,并且可能会帮助解决其他问题。

  var dailySeries =  {
   0:{color: 'blue', labelInLegend: 'P1'},
   1:{color: 'red', labelInLegend: 'P2'},
   2:{color: 'yellow', labelInLegend: 'P3'},
   3:{color: 'green', labelInLegend: 'P4'}
  }  
  var dailyChart = LOB.newChart()
   .setPosition(8, 27, 0, 0)
   .setChartType(Charts.ChartType.BAR)
   .asColumnChart()
   .setOption('title', LOB.getName())
   .addRange(dailyTotals.getCell(1, 1))
   .addRange(dailyTotals.getCell(2, 1))
   .addRange(dailyTotals.getCell(3, 1))
   .addRange(dailyTotals.getCell(4, 1))
   .setOption('series', dailySeries)
   .build();
 LOB.insertChart(dailyChart);