首页 > 解决方案 > 使用谷歌应用程序脚本图表服务创建图表会产生低质量的图像

问题描述

当我以编程方式创建图表、转换为图像并附加到文档时,图像的质量不如直接在文档上创建的(手动)。

有什么想法可以解决吗?

这就是我创建它的方式

var dataTable = Charts.newDataTable()
      .addColumn(Charts.ColumnType.STRING, 'Área')
      .addColumn(Charts.ColumnType.NUMBER, '# sessões')

  var i = 1;
  var extra = 0;
  var data = []
  for(var r in users_sessions_area) {
    var current = users_sessions_area[r] 
    if(i <= 5 && current.area && current.area != '') {
      dataTable.addRow([current.area, Number(current.sessions)]);
      data.push([current.area, Number(current.sessions)]);
    } else {
      extra += Number(current.sessions);
    }
    i++;
  }

  if(extra > 0) {
    dataTable.addRow(["Outras", extra]);
    data.push(["Outras", extra]);
  }

  sheet.getRange("A2:B" + (data.length + 1)).setValues(data);

  var chart = sheet.getCharts()[0];

  var graphData = Charts.newPieChart().setDataTable(dataTable);
  graphData.setTitle("% sobre o total de sessões");
  graphData.setLegendPosition(Charts.Position.BOTTOM);

  var chart = graphData.build();
  return chart.getAs('image/png');

然后将其添加到文档中

  body.findText("%%SESSION_AREAS_CHART%%").getElement().getParent().asParagraph().appendInlineImage(createSessionsPerAreaChart(variables));

标签: google-apps-script

解决方案


  • 您想以高分辨率将图表图像放入 Google 文档中。
  • 您想使用 Google Apps 脚本实现此目的。

如果我的理解是正确的,这个答案怎么样?请认为这只是几个可能的答案之一。

问题和解决方法:

不幸的是,在默认设置下,当图表作为图像块检索时,分辨率很低。因此,在这种情况下,需要在将图表设置为高分辨率后,将图表作为图像 blob 进行检索。通过这种方式,图表可以作为高分辨率的图像放入谷歌文档。

为了为图表设置高分辨率,在这个答案中,它使用setDimensions(). 使用setDimensions()时,图表大小可以做得很大。但是字体大小不会自动设置为大。所以还需要设置字体大小。

修改后的脚本:

当您的脚本被修改时,请进行如下修改。

从:

var chart = graphData.build();

到:

var chart = graphData.setDimensions(1000, 1000).setOption("fontSize", 40).build();

从:

body.findText("%%SESSION_AREAS_CHART%%").getElement().getParent().asParagraph().appendInlineImage(createSessionsPerAreaChart(variables));

到:

var image = body.findText("%%SESSION_AREAS_CHART%%").getElement().getParent().asParagraph().appendInlineImage(createSessionsPerAreaChart(variables));
image.setWidth(500).setHeight(500);

笔记:

  • 在上述修改后的脚本中,作为测试用例,基本分辨率设置为 1000 x 1000 像素。字体大小为 40。通过设置为 500 x 500 像素,将检索到的图像放入 Google 文档。
    • 关于这一点,请根据您的实际情况进行修改。
  • 如果要独立更改图表中标题和图例的字体大小,也可以使用setTitleTextStyle()setLegendTextStyle()
  • 如果您想将以上反映到其他图表,可能需要修改其他参数。所以请注意这一点。

参考:

如果我误解了您的问题并且这不是您想要的方向,我深表歉意。


推荐阅读