javascript - 如何使用mailapp发送图像和图表?

标签 javascript google-apps-script

我正在尝试在电子邮件中一起发送图像和电子表格图表,但我只能发送其中之一。例如,我只能发送图像,图表不会出现,如果我发送图表,图像也不会出现。我也是新手,谢谢各位的帮助。

{
function emailCharts(sheet,emails,emailSubject){
  DriveApp.getRootFolder()
var targetspreadsheet = SpreadsheetApp.getActiveSpreadsheet(); // Active spreadsheet of the key file
var sheet = targetspreadsheet.getSheetByName('Test'); // Change the sheet name Eg.'IPQC Overall Tracker' to your sheet name
var emailSubject = 'Scratches Awareness Program Test';
var emails = 'example@gmail.com'; // your email ID
var charts = sheet.getCharts();

if(charts.length==0){
MailApp.sendEmail({
to: emails,
subject: "ERROR:"+emailSubject,
htmlBody: "No charts in the spreadsheet"});    
return;
}

var emailStarting = "<br>@@@@@@@@TEST@@@@@@@@@@<br>"
var emailEnding = "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@<br>"
var emailSignature = "<br>Best Regards, <br>@@@@@@@@@@@@<br><br> This is an automated generated email. No signature is required."
var chartBlobs=new Array(charts.length); 
var emailBody="Hi Everyone,<br>" + emailStarting;
var emailImages={};
for(var i=0;i<charts.length;i++){
var builder = charts[i].modify();
builder.setOption('vAxis.format', '#');
var newchart = builder.build();
chartBlobs[i]= newchart.getAs('image/png');
emailBody= emailBody + "<p align='center'><img src='cid:chart"+i+"'></p>" ;
emailImages["chart"+i]= chartBlobs[i];
}
  var ssID = SpreadsheetApp.getActiveSpreadsheet().getId();
  var sheetName = SpreadsheetApp.getActiveSpreadsheet().getName();

var requestData = {"method": "GET",
"headers":{"Authorization":"Bearer "+ScriptApp.getOAuthToken()}};

var url = "https://docs.google.com/spreadsheets/d/"+ ssID + "/export?format=xlsx&id="+ssID;

  var result = UrlFetchApp.fetch(url , requestData);  
  var contents = result.getContent();
   var googleLogoUrl = "https://i.imgur.com/vO6IJVG.png";
  var youtubeLogoUrl =
        "https://i.imgur.com/xMqvjHf.jpg";
  var googleLogoBlob = UrlFetchApp
                         .fetch(googleLogoUrl)
                         .getBlob()
                         .setName("Scratches Alert");
  var youtubeLogoBlob = UrlFetchApp
                          .fetch(youtubeLogoUrl)
                          .getBlob()
                          .setName("Scratches Dashboard");

MailApp.sendEmail({
to: emails,
subject: emailSubject,
htmlBody: emailBody + emailEnding + emailSignature,
inlineImages:emailImages, attachments:[{fileName:sheetName+".xls", content:contents, mimeType:"application//xls"}],googleLogo: googleLogoBlob,youtubeLogo: youtubeLogoBlob});
}
}

最佳答案

  • 您想要发送图表图像,googleLogoBlobyoutubeLogoBlob作为内联图像,并希望将 Excel 文件(xlsx 格式)作为附件文件发送。
  • 您希望使用 Google Apps 脚本来实现此目的。

我可以这样理解。如果我的理解是正确的,那么这个修改怎么样?请将此视为多个答案之一。

修改点:

  • format=xlsx用于将 Google 电子表格转换为 Excel。
    • {fileName:sheetName+".xls", content:contents, mimeType:"application//xls"}用作附件文件。
    • 请修改为{fileName:sheetName+".xlsx", content:contents, mimeType: MimeType.MICROSOFT_EXCEL} .
  • googleLogo: googleLogoBlob,youtubeLogo: youtubeLogoBlob直接用作 MailApp.sendEmail(object) 的对象。和googleLogoyoutubeLogo不包含在内联图像中。
    • 请将这些图片添加到内嵌图片中。

当以上几点反射(reflect)到您的脚本中时,它会变成如下所示。

修改后的脚本:

请按如下方式修改您的脚本。

来自:

var url = "https://docs.google.com/spreadsheets/d/"+ ssID + "/export?format=xlsx&id="+ssID;

  var result = UrlFetchApp.fetch(url , requestData);  
  var contents = result.getContent();
   var googleLogoUrl = "https://i.imgur.com/vO6IJVG.png";
  var youtubeLogoUrl =
        "https://i.imgur.com/xMqvjHf.jpg";
  var googleLogoBlob = UrlFetchApp
                         .fetch(googleLogoUrl)
                         .getBlob()
                         .setName("Scratches Alert");
  var youtubeLogoBlob = UrlFetchApp
                          .fetch(youtubeLogoUrl)
                          .getBlob()
                          .setName("Scratches Dashboard");

MailApp.sendEmail({
to: emails,
subject: emailSubject,
htmlBody: emailBody + emailEnding + emailSignature,
inlineImages:emailImages, attachments:[{fileName:sheetName+".xls", content:contents, mimeType:"application//xls"}],googleLogo: googleLogoBlob,youtubeLogo: youtubeLogoBlob});
}
}

致:

  var url = "https://docs.google.com/spreadsheets/d/"+ ssID + "/export?format=xlsx"; // Modified
  var result = UrlFetchApp.fetch(url , requestData);  
  var contents = result.getContent();
  var googleLogoUrl = "https://i.imgur.com/vO6IJVG.png";
  var youtubeLogoUrl = "https://i.imgur.com/xMqvjHf.jpg";
  var googleLogoBlob = UrlFetchApp.fetch(googleLogoUrl).getBlob().setName("Scratches Alert");
  var youtubeLogoBlob = UrlFetchApp.fetch(youtubeLogoUrl).getBlob().setName("Scratches Dashboard");

  emailBody += "<img src='cid:googleLogo'><img src='cid:youtubeLogo'>"; // Added
  emailImages.googleLogo = googleLogoBlob; // Added
  emailImages.youtubeLogo = youtubeLogoBlob; // Added

  MailApp.sendEmail({ // Modified
    to: emails,
    subject: emailSubject,
    htmlBody: emailBody + emailEnding + emailSignature,
    inlineImages: emailImages,
    attachments: [{fileName: sheetName+".xlsx", content: contents, mimeType: MimeType.MICROSOFT_EXCEL}],
  });
}

注意:

  • 关于googleLogoyoutubeLogo ,请修改<img src='cid:googleLogo'><img src='cid:youtubeLogo'>根据您的实际情况。

引用文献:

关于javascript - 如何使用mailapp发送图像和图表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58722099/

相关文章:

javascript - 为基于鼠标事件的动态div创建一个类

google-apps-script - 如何或在何处定义在多个电子表格中使用的函数?

arrays - AppS 脚本 : 'number of columns in the data does not match the number of columns in the range.' setValues method not reading array correctly?

javascript - 在 Ext JS 中动态显示/隐藏子面板

使用 AJAX 时 JavaScript Document.Write 替换所有正文内容

javascript - 如何在谷歌应用程序脚本中编写 if/and 语句

regex - 如何从谷歌表格中的文本字符串中提取前 20 个以上的单词

javascript - 如何从管理员目录中获取员工职位?

javascript - 在 JavaScript 或 Jquery 中查找 <a> 元素 href#value

javascript - 升级到 Ionic RC4 后运行应用程序时出错