您必须将图表转换为图像,然后将该图像添加到您的卡片中。
setImageUrl(url) 接受可公开访问的 URL 和 base64 编码的图像字符串。
工作流程取决于图表是否由插件构建。
- 如果图表是由插件构建的,您只需检索 base 64 字符串:
function getChartImageUrl() {
var chart = Charts.
// Building chart methods
.build();
var imageData = Utilities.base64Encode(chart.getAs('image/png').getBytes());
var imageUrl = "data:image/png;base64," + encodeURI(imageData);
return imageUrl;
}
然后将其添加到您的卡片中:
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:
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();
}
然后,在插件中,通过 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 添加到清单中(请参阅 Setting explicit scopes)。