【问题标题】:Export Google sheet Chart as an image将 Google 工作表图表导出为图像
【发布时间】:2020-02-18 00:50:46
【问题描述】:

请您帮忙了解如何使用 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@gmail.com",
    subject: "test2",
    htmlBody: emailBody,
    inlineImages:emailImages});
  }
}

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

将此代码添加到脚本中。 将 email@gmail.com 替换为您的电子邮件

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

最好的问候。

【问题讨论】:

  • 我想查看更多代码。以及更多关于什么不起作用的解释。
  • 你好@SandyGood,我添加了完整的代码和问题描述。
  • 我的图表看起来像一个 png 文件。如果我手动将图表保存为文件,它将被设置为 png 文件。 .getAs("image/png") 转换不起作用。它不能正确转换图表。要么有问题,要么存在错误,要么需要一种新方法将图表转换为图像。我找不到转换它的方法。也许在 Apps Script Issue tracker 上发布问题。确保首先搜索以查看是否已经存在某些内容。 Apps Script Issue Tracker
  • 这是一个 Apps 脚本问题发布:Chart.getAs('image/jpeg').getBytes()
  • @AlanWells - 您是否能够找到任何替代方法来将图表导出为图像而不是使用此转换?我今天遇到了同样的问题 - 它说We're sorry, a server error occurred. Please wait a bit and try again ????

标签: google-apps-script


【解决方案1】:

将 Google 表格图表导出为图像

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

function createPieChart(){
  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: "john@domain.com",
    subject: "test",
    htmlBody: "fair enough",
    attachments: [img]}); //If this gives you problems, replace img with img.getAs(MimeType.JPEG)
} 

到另一个电子表格(不同于图表的源数据所在的位置):

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

function createPieChart(){
  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); 
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-05
    • 1970-01-01
    • 2013-02-16
    • 1970-01-01
    相关资源
    最近更新 更多