【问题标题】:Is it possible to convert a Chart to and EmbeddedChart?是否可以将图表转换为嵌入式图表?
【发布时间】:2019-05-11 17:42:01
【问题描述】:

我正在尝试从一张数据表中创建一些图表,但这些图表正在抓取特定的数据,因此我发现使用 DataTableBuilder 类是有利的。我能够比原始工作表更容易地为数据指定标签。但是,我无法将图表类嵌入工作表中。是否可以将图表转换为 EmbeddedChart 或使用 DataTable 创建 EmbeddedChart?我正在尝试从一张数据表中创建一些图表,但这些图表正在抓取特定数据,所以我找到了它有利于使用 DataTableBuilder 类。我能够比原始工作表更容易地为数据指定标签。但是,我无法将图表类嵌入工作表中。是否可以将 Chart 转换为 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   

以下是我如何构建图表,其中 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?或者如何将图表变成嵌入式图表?

【问题讨论】:

  • 我目前最好的是this question,它利用 UIApp 将其呈现为图像,但目前已被弃用且毫无用处。

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


【解决方案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);

【讨论】:

  • 我也是这么想的。它可能不是传统的或预期的使用方式,但它可以满足我的需要,所以我并不为此生气。
【解决方案2】:

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

A  B
P1 0   
P2 0   
P3 3   
P4 1   

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-06
    • 2021-04-23
    • 2011-07-24
    相关资源
    最近更新 更多