使用Appscript将Google表格中的3d图表作为图像插入电子邮件中

时间:2019-04-28 12:45:51

标签: google-apps-script charts google-sheets google-visualization

我正在尝试使用以下代码将Google表格中的3D图表插入电子邮件中,但是电子邮件中的图像已转换为2D。 谁能帮我将Google工作表中的图表提取到具有所有属性的电子邮件中?

原始图表

电子邮件中的图表

function email(sheet, toMail, ccMail, msg){
  var charts = sheet.getCharts();
  var emailImages={};
  var chartBlobs=new Array(charts.length); 
  for(var i=0;i<charts.length;i++){    
    chartBlobs[i]= charts[i].getAs("image/png").setName("chartBlob"+i);
    emailBody= emailBody + "<p align='left'><img src='cid:chart"+i+"'></p>";
    emailImages["chart"+i]= chartBlobs[i];
  }
  MailApp.sendEmail({
    to: toMail,    
    cc: ccMail,
    subject: "ABC",   
    htmlBody: emailBody,
    inlineImages:emailImages});

}

1 个答案:

答案 0 :(得分:1)

  • 您要发送电子邮件,包括电子表格上的3D图表。

如果我的理解是正确的,该解决方法如何?我也遇到过同样的问题。当电子表格上的图表作为blob检索时,blob的图表与原始图表不同。我认为这可能是一个错误。在这种情况下,作为以下几种解决方法之一,我使用了以下流程。

修改后的脚本流程:

  1. 从电子表格中检索图表。
  2. 将Google幻灯片创建为临时幻灯片。
  3. 将图表作为图像插入到幻灯片中。
  4. 以斑点形式检索插入的图表。
  5. 发送电子邮件,其中包括检索到的blob。
  6. 删除临时的Google幻灯片。

修改后的脚本:

在此修改中,我修改了您的脚本。请按如下所示修改脚本。

function email(sheet, toMail, ccMail, msg){
  var charts = sheet.getCharts();

  var slides = SlidesApp.create("sample"); // Added
  var slide = slides.getSlides()[0]; // Added

  var emailImages={};
  var chartBlobs=new Array(charts.length);
  var emailBody = ""; // Added
  for(var i=0;i<charts.length;i++){
    var image = slide.insertSheetsChartAsImage(charts[i]); // Added
    chartBlobs[i]= image.getAs("image/png").setName("chartBlob"+i); // Modified
    emailBody= emailBody + "<p align='left'><img src='cid:chart"+i+"'></p>";
    emailImages["chart"+i]= chartBlobs[i];
  }
  MailApp.sendEmail({
    to: toMail,
    cc: ccMail,
    subject: "ABC",
    htmlBody: emailBody,
    inlineImages:emailImages});

  DriveApp.getFileById(slides.getId()).setTrashed(true); // Added
}

注意:

  • 在此修改后的脚本中,临时Google幻灯片已移至垃圾箱。
  • 我向the issue tracker报告了此问题。

参考文献:

如果我误解了您的问题,而这种解决方法不是您想要的,我表示歉意。