Google apps script 在谷歌卡片中插入谷歌图表

Google apps script 在谷歌卡片中插入谷歌图表,google-apps-script,add-on,Google Apps Script,Add On,我正在使用CardService开发一个google插件。有没有办法在谷歌卡片[2]中插入谷歌图表[1]?我找不到这方面的任何文档 还想办法把图表转换成图像并插入,这可能吗 [1] - [2] -您必须将图表转换为图像,然后将该图像添加到卡中 接受可公开访问的URL和base64编码的图像字符串 工作流将取决于图表是否由附加组件生成 如果图表是由加载项生成的,则只需检索基本64字符串: 然后将其添加到您的卡中: function createChartCard() { var image

我正在使用CardService开发一个google插件。有没有办法在谷歌卡片[2]中插入谷歌图表[1]?我找不到这方面的任何文档

还想办法把图表转换成图像并插入,这可能吗

[1] -


[2] -

您必须将图表转换为图像,然后将该图像添加到卡中

接受可公开访问的URL和base64编码的图像字符串

工作流将取决于图表是否由附加组件生成

  • 如果图表是由加载项生成的,则只需检索基本64字符串:
然后将其添加到您的卡中:

function createChartCard() {
  var image = CardService.newImage().setAltText("An awesome chart").setImageUrl(getChartImageUrl());
  var section = CardService.newCardSection()
      .addWidget(image)
  var card = CardService.newCardBuilder()
      .addSection(section)
  return card.build();
}
  • 如果图表不是由附加组件构建的,我建议将图像存储在驱动器中,使其公开访问并检索其ID:
然后,在外接程序中,根据文件ID检索文件并获取其base64编码字符串:

function createChartCard() {
  var imageId = "YOUR_IMAGE_ID"; // Returned by getChartImageId()
  var imageBytes = DriveApp.getFileById(imageID).getBlob().getBytes();
  var encodedImageURL = "data:image/jpeg;base64," + Utilities.base64Encode(imageBytes);
  var image = CardService.newImage().setAltText("An awesome chart").setImageUrl(encodedImageURL);
  var section = CardService.newCardSection()
      .addWidget(image)
  var card = CardService.newCardBuilder()
      .addSection(section)
  return card.build();
}

在第二种方法中,必须添加范围
https://www.googleapis.com/auth/drive.readonly
到您的清单(请参阅)。

Hm,好问题,我以前研究过它-没有直接这样做的方法,但插入一个图像作为带有数据URL的
image
小部件(
data:image/png;base64
)这很可能是一条路要走。唯一的缺点是我们无法控制图像的大小,因此您应该根据需要制作图表。如果您希望添加表格图表,请注意使用
getAs()
方法。我已经有一段时间没有使用图表了,决定在
TableChart
上进行测试,它显然有一个导致服务器错误的bug(尚未修复):
function getChartImageId() {
  var chart = Charts.
              // Building chart methods
              .build();
  var imageBlob = chart.getAs('image/png');
  var file = DriveApp.createFile(imageBlob).setName("MY AWESOME CHART");
  file.setSharing(DriveApp.Access.ANYONE, DriveApp.Permission.VIEW);
  return file.getId();
}
function createChartCard() {
  var imageId = "YOUR_IMAGE_ID"; // Returned by getChartImageId()
  var imageBytes = DriveApp.getFileById(imageID).getBlob().getBytes();
  var encodedImageURL = "data:image/jpeg;base64," + Utilities.base64Encode(imageBytes);
  var image = CardService.newImage().setAltText("An awesome chart").setImageUrl(encodedImageURL);
  var section = CardService.newCardSection()
      .addWidget(image)
  var card = CardService.newCardBuilder()
      .addSection(section)
  return card.build();
}