Google表格自动将自定义范围发送到电子邮件

时间:2019-06-06 23:51:26

标签: google-apps-script google-sheets google-sheets-macros

我正在尝试使用脚本编辑器将带有特定PDF附件的电子邮件发送到Google表格中的各种电子邮件中。

我知道我可以在此站点上访问一些可以为我提供帮助的主题,但是我对Google表格脚本编辑器不太了解。我研究了VBA和SQL,但是直到5年前才达到中等水平。这是我目前的情况:

我正在尝试建立一个系统,向我的客户发送一封来自Google的自动电子邮件,其中向他们显示他们的特定信息和一条短消息。我想我了解此消息的方面,但是我不知道如何选择信息。下面的链接将带您进入我要发送的内容类型:

https://drive.google.com/open?id=16VGcID3a5cT9SXFP4IrrwFbamq_01Na0t6jONCrHm0E

在链接中,我提供了一个正在使用的示例。我尽了最大努力来复制实际文件(不包括机密信息),但是工作表的布局和名称都与我的文件相同。我了解是否需要其他信息-我会尽力做到这一点。

最后,我想将表格作为PDF附件发送,并包含简短的主题和正文。

不幸的是,我没有起点。

我尝试了一些尝试,但是我真的在黑暗中拍摄。我在网上看了一些教程,并按照它们进行了学习,但是它们并没有包含我所需要的一切,而那些确实使他们变得复杂。

1 个答案:

答案 0 :(得分:0)

function emailWashburn() {

  SpreadsheetApp.getActive().getSheetByName(".02 Dup").activate();

  var emailRange = SpreadsheetApp.getActiveSheet().getRange("C6");
  var emailAddress = emailRange.getValues();
  
  var nameRange = SpreadsheetApp.getActiveSheet().getRange("C3");
  var currentName = nameRange.getValues();
  
  var dateRange = SpreadsheetApp.getActiveSheet().getRange("C7");
  var currentDate = dateRange.getValues();
  
  var templateText = SpreadsheetApp.getActive().getRangeByName("DUP_Body").getValue();
  
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.insertSheet(6);
  spreadsheet.getActiveSheet().setName('temp');
  spreadsheet.setActiveSheet(spreadsheet.getSheetByName('.02 Dup'), true);
  spreadsheet.getRange('A1:E12').activate();
  spreadsheet.setActiveSheet(spreadsheet.getSheetByName('temp'), true);
  spreadsheet.getRange('\'.02 Dup\'!A1:E12').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
  spreadsheet.getRange('\'.02 Dup\'!A1:E12').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_FORMAT, false);
  spreadsheet.getRange('\'.02 Dup\'!A1:E12').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_COLUMN_WIDTHS, false);
  
  var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("temp").getRange(1, 1, 12, 12);
  var destination = SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/1Yk6l1etGAwWE7hQ48u17GoxezRjIEv07WLZ_O3Chmrc/edit#gid=0").getSheetByName("Temp");
  
  ss.copyTo(destination);
  
  var emailAttachment = DriveApp.getFileById(destination.getId()).getAs("application/pdf");
  emailAttachment.setName("Washburn" + ".pdf");
  
  var messageBody = templateText.replace("{name}", currentName).replace("{date}", currentDate);
  var subjectLine = "Attn: Updated fuel prices effective as of " + currentDate;
  
  MailApp.sendEmail(emailAddress, subjectLine, messageBody, {
  htmlBody: messageBody,
  attachments: [emailAttachment]
  });
 
  var spreadsheets = SpreadsheetApp.getActive();
  spreadsheets.setActiveSheet(spreadsheet.getSheetByName('temp'), true);
  spreadsheets.deleteActiveSheet();
}

我的主要问题在第29行,这是因为该公式用于将整个工作表复制并粘贴到新工作表的电子表格中-但我试图通过同时指定复制范围和粘贴范围来对此进行应对。 / p>

此外,我实际上知道这不是解决此问题的最简单方法(将定义的范围以PDF格式发送给电子邮件收件人),但是在仔细阅读了一些教程之后,这似乎是一个好方法这样做。

如果这不是一个好方法,而我只是在转动车轮-请让我知道,以便尝试其他角度。