首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将多个工作表导出为多个PDF,并将其作为带有HTML正文的附件添加到Sendmail中

将多个工作表导出为多个PDF,并将其作为带有HTML正文的附件添加到Sendmail中
EN

Stack Overflow用户
提问于 2019-06-19 20:49:11
回答 1查看 489关注 0票数 0

我已经寻找并尝试了许多解决方案,但由于某些原因,我无法使其工作。

我的目标是:

  • 自动按时发送电子邮件触发器(工作)基于单元格值的
  • (工作)采用HTML邮件格式的
  • (谷歌表单)(工作)具有2个或更多附件的
  • (不工作)

我怎样才能改变代码,使其包含2个pdf文件?它可以是两个选项之一: 1.按名称抓取pdf grom google驱动器文件夹,在那里我得到了一个工作函数,可以将2个或更多的表导出为pdf -使用相同的名称(并删除旧版本)。2.将2张或更多张图纸转换为相应的PDF文件,并将其作为附件添加。

我是个新手,所以还在努力摸索。

尝试组合这里找到的几个解决方案,但我要么一直收到‘文件迭代’错误。

当使用GetFilesByName的变体时,如果(file.HasNext(),getAs(‘应用程序/PDF’)),我没有得到错误,但也没有邮件发送。

代码语言:javascript
复制
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一起工作的,但它确实如此。-对每个板材重复导出脚本,更改所需的参数。

得到了一个可以工作的脚本,但很可能会变得更简单?

最终结果

代码语言:javascript
复制
// 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?
    }
  }
}
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56668052

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档