Как отправить изображение и графики с помощью mailapp? - PullRequest
0 голосов
/ 06 ноября 2019

Я пытаюсь отправить изображение и диаграмму электронной таблицы вместе, но могу отправить только одно или другое. Например, я могу только отправлять изображения, и диаграмма не появится, а если я отправлю диаграммы, изображения не появятся. Я тоже новичок в этом, спасибо за помощь.

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

Ответы [ 2 ]

2 голосов
/ 07 ноября 2019
  • Вы хотите отправить изображения диаграмм, googleLogoBlob и youtubeLogoBlob в качестве встроенных изображений, и хотите отправить файл Excel (формат xlsx) в качестве файла вложения.
  • Вы хотитечтобы добиться этого с помощью Google Apps Script.

Я мог бы понять, как это. Если мое понимание верно, как насчет этой модификации? Пожалуйста, подумайте об этом как об одном из нескольких ответов.

Точки изменения:

  • format=xlsx используется для преобразования Google Spreadsheet в 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). И googleLogo и youtubeLogo не включены в встроенные изображения.
    • Пожалуйста, включите это изображение во встроенные изображения.

Когда вышеуказанные точки отражаются в вашем сценарии, он выглядит следующим образом.

Измененный скрипт:

Пожалуйста, измените ваш скрипт следующим образом.

С:

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}],
  });
}

Примечание:

  • О googleLogo и youtubeLogo, пожалуйста, измените <img src='cid:googleLogo'><img src='cid:youtubeLogo'> для вашей реальной ситуации.

Ссылки:

1 голос
/ 06 ноября 2019

Ваш код в порядке, единственное, что у вас есть, это то, как вы строите свой MailApp.sendEmail(). Сделайте это следующим образом:

 var  emails = "example@gmail.com";
 var  emailSubject =  "Test Subject";
 var body = emailBody + emailEnding + emailSignature;
 var spreadsheetObj = {
    fileName:sheetName+".xls", 
    content:contents, 
    mimeType:"application//xls"
  };
   MailApp.sendEmail({
     to: emails,
     subject: emailSubject,
     htmlBody: body,
     attachments: [ spreadsheetObj, googleLogoBlob, youtubeLogoBlob]      
   });

Вложения должны быть массивом, вы его неправильно строили. Как сказано в Docs :

attachments BlobSource [] Массив файлов для отправки с электронной почтой (см. Пример)

Примечание:

Если вы приложите несколько файлов, электронная почта может занять некоторое время.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...