使用谷歌应用脚​​本在图表上设置角色

时间:2017-06-16 14:58:59

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

我正在使用电子表格应用程序脚本编写代码。

我正在尝试创建一个ColumnTable并进行注释或为不同的列着色。

谷歌的可视化非常清楚,但很少有关于将其与应用程序脚本一起使用的文档。

我想要执行的代码类似于:

var data = google.visualization.arrayToDataTable([
     ['Element', 'Density', { role: 'style' }, { role: 'annotation'}],
     ['Copper', 8.94, '#b87333', 'Cu' ],
     ['Silver', 10.49, 'silver', 'Ag' ],
     ['Gold', 19.30, 'gold', 'Au' ],
     ['Platinum', 21.45, 'color: #e5e4e2', 'Pt' ]
  ]);

但是我无法执行 ['Element','Density',{role:'style'},{role:'annotation'} 行,因为没有Charts.ColumnType喜欢'角色'。

有人可以帮助我吗?

2 个答案:

答案 0 :(得分:0)

我认为您正在寻找setColumns(columns)因为它也引用Visualization Chart's DataTable Roles

  

<强> setColumns(列)

     

设置要包含在数据视图中的列的索引以及   指定角色列信息。这个列索引的子集   请参阅数据视图所在的数据源列   源自。

     

列角色描述了该列中数据的用途:for   例如,列可能包含描述工具提示文本,数据点的数据   注释或不确定性指标。有关详细信息,请参阅   Google Charts文档中的DataTable角色。

答案 1 :(得分:-1)

function myFunction() {
  var presentation = SlidesApp.getActivePresentation();
  var slide = presentation.getSlides()[0];

  var COLUMN_SPEC = [
  0, // H
  1, //

  {sourceColumn: 1, role: 'annotation'},
    2, //
    {sourceColumn: 2, role: 'annotation'}
];

  var viewSpec = Charts.newDataViewDefinition()
      .setColumns(COLUMN_SPEC)
      .build();

  var data = Charts.newDataTable()
      .addColumn(Charts.ColumnType.STRING, 'H')
      .addColumn(Charts.ColumnType.NUMBER, 'Test1')
      .addColumn(Charts.ColumnType.NUMBER, 'Test2')
      .addRow(['H1 18', 13, 33])
      .addRow(['H2 18', 10, 25])
      .addRow(['H1 19', 17, 23])
      .addRow(['H2 19', 17, 29])
      .build();

  var chartBuilder = Charts.newLineChart()
      .setXAxisTitle('H')
      .setYAxisTitle('Value')
      .setDimensions(600, 500)
  .setDataViewDefinition(viewSpec)
      //.setOption('useFirstColumnAsDomain', true)
      .setCurveStyle(Charts.CurveStyle.NORMAL)
      .setPointStyle(Charts.PointStyle.NONE)
      .setLegendPosition(Charts.Position.BOTTOM)
      .setDataTable(data);

  var chart = chartBuilder.build();  

  var areaBlob = chart.getBlob().getAs('image/png').setName("areaBlob");
  slide.insertImage(areaBlob,  3, 3, 306, 163);  
}