Я посмотрел и перепробовал много решений, но по какой-то причине не могу заставить его работать.
Моя цель:
- Автоматическая отправка электронных писем по времени срабатывания (работает)
- На основе значения ячейки (работает)
- С почтовым форматом HTML (форма Google) (работает)
- С 2 или более вложениями (не работает)
Как я могу изменить код, чтобы он включал 2 файла PDF? Это может быть один из двух вариантов:
1. Возьмите pdf grom папку на диске Google по имени, где я получил рабочую функцию для экспорта 2 или более листов в pdf - используя то же имя (и удаляя старую версию).
2. Преобразуйте 2 или более листов в соответствующие файлы PDF и добавьте их в виде вложений.
Я довольно новичок, поэтому все еще пытаюсь разобраться.
Пробное объединение. Несколько решений, найденных здесь, но я либо продолжаю получать ошибку итерации файла.
При использовании варианта GetFilesByName, если (file.HasNext (), getAs ('application / PDF'), я не получаю сообщение об ошибке, но письмо также не отправляется.
function sendEmails2() {
var sheet = SpreadsheetApp.getActiveSheet();
var startRow = 2; // First row of data to process
var numRows = sheet.getRange(1,5).getValue(); // Number of rows to process
// Fetch the range of cells A2:B3
var dataRange = sheet.getRange(startRow, 1, 15, 3); // this function is: Row, Column, Number of Rows, Number of Columns
// Fetch values for each row in the Range.
var data = dataRange.getValues();
// var bijlage1 = DriveApp.getFilesByName('EDC-A.pdf'); // definiëring van file 2
// var bijlage2 = DriveApp.getFilesByName('EDC-B.pdf'); // definiëring van file 1
for (var i = 0; i < data.length; ++i) {
var row = data[i];
var emailAddress = row[0]; // First column
var message = row[1]; // Second column
var body = '';
var html = HtmlService.createTemplateFromFile('body').evaluate().getContent(); // legt link met Body html file
var options = {
htmlBody: html
};
var aantaluzk = row[2]; // Third column
if (aantaluzk != 0) { // Variable
var subject = 'Uitzendkrachten te evalueren';
MailApp.sendEmail(emailAddress,subject,body,options);
SpreadsheetApp.flush(); // geen idee wat dit doet?
}
}
}
РЕДАКТИРОВАТЬ: как по запросу,
Код, содержащий скрипт для экспорта (был в другом файле скрипта)
μ
Основываясь на комментариях, мне удалось заставить это работать через:
- Объедините скрипт экспорта pdf с функцией Sendmail и определите их как переменные. Не понимаю полностью, как это работает с BLOB, но это так.
- Повторите сценарий экспорта для каждого листа, изменив необходимые параметры.
В результате получается скрипт, который работает, но, скорее всего, его можно было бы сделать намного проще?
Окончательный результат
// Test en goedgekeurd 19/6
function MailExport() {
var sheetName = "EDCA";
var folderID = "1gNoRIktbqYjIzE8txUezW5wt_jliIWYJ"; // Folder id to save in a folder.
var pdfName = "EDC-A"; // "+Date()" toevoegen zonder "" indien timestamp aan file toegevoegd;
var sourceSpreadsheet = SpreadsheetApp.getActive();
var sourceSheet = sourceSpreadsheet.getSheetByName(sheetName);
var folder = DriveApp.getFolderById(folderID);
// Vernietig de vorige versie
DriveApp.getFilesByName('EDC-A').next().setTrashed(true);
//Copy whole spreadsheet
var destSpreadsheet = SpreadsheetApp.open(DriveApp.getFileById(sourceSpreadsheet.getId()).makeCopy("tmp_convert_to_pdf", folder))
//delete redundant sheets
var sheets = destSpreadsheet.getSheets();
for (i = 0; i < sheets.length; i++) {
if (sheets[i].getSheetName() != sheetName){
destSpreadsheet.deleteSheet(sheets[i]);
}
}
var destSheet = destSpreadsheet.getSheets()[0];
//repace cell values with text (to avoid broken references)
var sourceRange = sourceSheet.getRange(1,1,sourceSheet.getMaxRows(),sourceSheet.getMaxColumns());
var sourcevalues = sourceRange.getValues();
var destRange = destSheet.getRange(1, 1, destSheet.getMaxRows(), destSheet.getMaxColumns());
destRange.setValues(sourcevalues);
//save to pdf
var theBlob = destSpreadsheet.getBlob().getAs('application/pdf').setName(pdfName);
var newFile = folder.createFile(theBlob);
//Delete the temporary sheet
DriveApp.getFileById(destSpreadsheet.getId()).setTrashed(true);
// Afdeling 2
var sheetName = "EDCB";
var folderID = "1gNoRIktbqYjIzE8txUezW5wt_jliIWYJ"; // Folder id to save in a folder.
var pdfName = "EDC-B"; // "+Date()" toevoegen zonder "" indien timestamp aan file toegevoegd;
var sourceSpreadsheet = SpreadsheetApp.getActive();
var sourceSheet = sourceSpreadsheet.getSheetByName(sheetName);
var folder = DriveApp.getFolderById(folderID);
// Vernietig de vorige versie
DriveApp.getFilesByName('EDC-B').next().setTrashed(true);
//Copy whole spreadsheet
var destSpreadsheet = SpreadsheetApp.open(DriveApp.getFileById(sourceSpreadsheet.getId()).makeCopy("tmp_convert_to_pdf", folder))
//delete redundant sheets
var sheets = destSpreadsheet.getSheets();
for (i = 0; i < sheets.length; i++) {
if (sheets[i].getSheetName() != sheetName){
destSpreadsheet.deleteSheet(sheets[i]);
}
}
var destSheet = destSpreadsheet.getSheets()[0];
//repace cell values with text (to avoid broken references)
var sourceRange = sourceSheet.getRange(1,1,sourceSheet.getMaxRows(),sourceSheet.getMaxColumns());
var sourcevalues = sourceRange.getValues();
var destRange = destSheet.getRange(1, 1, destSheet.getMaxRows(), destSheet.getMaxColumns());
destRange.setValues(sourcevalues);
//save to pdf
var theBlob2 = destSpreadsheet.getBlob().getAs('application/pdf').setName(pdfName);
var newFile2 = folder.createFile(theBlob2);
//Delete the temporary sheet
DriveApp.getFileById(destSpreadsheet.getId()).setTrashed(true);
// Onderdeel voor mail
var sheet = SpreadsheetApp.getActiveSheet();
var startRow = 2; // First row of data to process
var numRows = sheet.getRange(1,5).getValue(); // Number of rows to process
// Fetch the range of cells A2:B3
var dataRange = sheet.getRange(startRow, 1, 15, 3); // this function is: Row, Column, Number of Rows, Number of Columns
// Fetch values for each row in the Range.
var data = dataRange.getValues();
for (var i = 0; i < data.length; ++i) {
var row = data[i];
var emailAddress = row[0]; // First column
var message = row[1]; // Second column
var body = '';
var html = HtmlService.createTemplateFromFile('body').evaluate().getContent(); // legt link met Body html file
var options = {
attachments: [theBlob,theBlob2],
htmlBody: html
};
var aantaluzk = row[2]; // Third column
if (aantaluzk != 0) { // Variable
var subject = 'Uitzendkrachten te evalueren';
MailApp.sendEmail(emailAddress,subject,body,options);
SpreadsheetApp.flush(); // geen idee wat dit doet?
}
}
}