将Google工作表图表导出为图像

问题描述 投票:3回答:1

请提供有关如何使用Google脚本将图表导出到图像的帮助。

我写了这段代码,但是不起作用。我担心API getAs已过时。

function TestEmailCharts(){
    var sheet = SpreadsheetApp.getActiveSheet();

  var charts = sheet.getCharts();

  if(charts.length!=0)
  {
  var chartBlobs=new Array(charts.length); 
  var emailBody="Charts<br>";
  var emailImages={};
  for(var i=0;i<charts.length;i++){
    chartBlobs[i]= charts[i].getAs("image/jpeg").setName("chartBlob"+i);
    emailBody= emailBody + "<img src='cid:chart"+i+"'><br>";
    emailImages["chart"+i]= chartBlobs[i];
  }

  MailApp.sendEmail({
    to: "[email protected]",
    subject: "test2",
    htmlBody: emailBody,
    inlineImages:emailImages});
  }
}

要重现该问题,请创建一个Google电子表格用一些数据创建一个简单的图表。

将此代码添加到脚本中。用您的电子邮件替换[email protected]

通常您应该收到带有图表图像的电子邮件但是问题是您将收到一封带有黑色图像的电子邮件。

最好的问候。

google-apps-script
1个回答
0
投票

将Google工作表图表导出为图像

通过电子邮件:首先创建图表,然后获取其斑点。然后将blob作为附件发送。

function createPieChart(sheet){
  var sheet = SpreadsheetApp.openById("<ID>").getSheetByName("<SheetName>");
  var chartBuilder = sheet.newChart() 
      .asPieChart() 
      .set3D()
      .addRange(sheet.getRange("A20").getDataRegion())
      .setPosition(16, 5, 0, 0)
      .setOption('title', "Total hour split in 2020");
  var blob = chartBuilder.build().getBlob();
  sendMail(blob);
}

function sendMail(img){
  MailApp.sendEmail({
    to: "[email protected]",
    subject: "test",
    htmlBody: "fair enough",
    attachments: [img.getAs(MimeType.JPEG)]});
} 

到另一个电子表格(与图表的源数据不同):

类似的方法,创建图表,然后将斑点作为图像插入目标表中:

function createPieChart(sheet){
  var srcSheet = SpreadsheetApp.openById("<ID>").getSheetByName("<SheetName>"); 
  var destSheet = SpreadsheetApp.openById("<ID>").getSheetByName("<SheetName>");       var chartBuilder = srcSheet.newChart() 
      .asPieChart() 
      .set3D()
      .addRange(sheet.getRange("A20").getDataRegion())
      .setPosition(16, 5, 0, 0)
      .setOption('title', "Total hour split in 2020");
   var blob = chartBuilder.build().getBlob();
  destSheet.insertImage(blob, 1, 1); 
}
© www.soinside.com 2019 - 2024. All rights reserved.