Email 确认后将附有PDF的邮件发送给收件人

Email 确认后将附有PDF的邮件发送给收件人,email,pdf,google-apps-script,google-sheets,Email,Pdf,Google Apps Script,Google Sheets,我必须每天编辑谷歌电子表格文件。当我完成时,我想向人们发送一条消息,通知他们我完成了。附在通知邮件之后,我想给他们发送一份特定的表格(称为报告),PDF格式 我找到了这个发送电子邮件的选项(并且工作正常): 是否有办法将特定工作表添加为PDF格式 第二个问题:如何在电子表格中创建某种按钮(“立即发送”),以便轻松发送此电子邮件,而不必每次都打开脚本编辑器?菜单驱动的按需操作 在GoogleSheets用户界面中,一个菜单项将是一种自然的方式,可以将其设置为按需运行。1学习如何自己执行此操作的一个

我必须每天编辑谷歌电子表格文件。当我完成时,我想向人们发送一条消息,通知他们我完成了。附在通知邮件之后,我想给他们发送一份特定的表格(称为报告),PDF格式

我找到了这个发送电子邮件的选项(并且工作正常):

是否有办法将特定工作表添加为PDF格式

第二个问题:如何在电子表格中创建某种按钮(“立即发送”),以便轻松发送此电子邮件,而不必每次都打开脚本编辑器?

菜单驱动的按需操作 在GoogleSheets用户界面中,一个菜单项将是一种自然的方式,可以将其设置为按需运行。1学习如何自己执行此操作的一个好资源是Google的

从该教程中,以下代码将向电子表格中添加“发送报告”菜单项,选中该菜单项时将调用
sendReport\(
函数):

/**
*打开电子表格时运行的特殊函数,用于添加
*将自定义菜单添加到电子表格。
*/
函数onOpen(){
var电子表格=SpreadsheetApp.getActive();
变量菜单项=[
{name:'发送报告',functionName:'发送报告}
];
电子表格。添加菜单(“自定义”,菜单项);
}
sendReport\uux()
函数 假设我们有一个
getPdfBlob()
函数,它将返回一个适合附加到电子邮件的
blob
。考虑到这一点,下面是所有
sendReport_389;()
需要做的事情:

//来自https://stackoverflow.com/a/37149036/1677912
函数sendReport_uz(){
//配置参数;根据需要自定义
var sheetName=“报告”;
var subject=“电子邮件主题行”;
var收件人=”user1@example.com, user2@example.com";
var htmlMessage=“问候,

” +“请查看今天的报告,以PDF格式附上。

” +“干杯,

; //获取感兴趣的电子表格和工作表的ID var ss=SpreadsheetApp.getActive(); var sheetId=ss.getSheetByName(sheetName).getSheetId(); //检索PDF blob var pdfBlobArray=getPdfBlobs(ss.getId(),sheetId); //发送电子邮件+附件 MailApp.sendEmail(收件人,主题,“报告附件”{ htmlBody:htmlMessage, 附件:pdfBlobArray }); }
getPdfBlobs()
实用程序函数 中会出现一个用于生成电子表格PDF的实用程序。 它可以调整为返回一个
blob
,其中包含您要查找的单个工作表的PDF

必须通过“资源>高级驱动器服务…”和开发人员控制台启用。(有关更多信息,请参阅。)

注意:通过编辑嵌入此函数中的URL参数,可以对PDF输出进行一些粗略的自定义

/**
*将电子表格中的一个或所有工作表作为PDF文件块获取。
*
*发件人:https://stackoverflow.com/a/37149036/1677912
*改编自https://stackoverflow.com/a/30492812/1677912
*
*要导出的电子表格的@param{String}optSSId(可选)ID。
*如果未提供,脚本将假定它是
*工作表绑定并打开激活的电子表格。
*要导出的单个工作表的@param{String}optSheetId(可选)ID。
*如果未提供,将导出所有图纸。
*/
函数getPdfBlobs(optSSId、optSheetId){
//如果提供了工作表ID,请打开该工作表,否则假定脚本为
//绑定图纸,然后打开激活的电子表格。
var ss=(optSSId)?SpreadsheetApp.openById(optSSId):SpreadsheetApp.getActiveSpreadsheet();
//获取电子表格的URL,并删除尾部的“编辑”
var url=ss.getUrl().replace(/edit$/,“”);
//获取电子表格中所有工作表的数组
var sheets=ss.getSheets();
//循环浏览所有图纸,生成PDF Blob。
var blobArray=[];
对于(var i=0;i
function sendEmails() {
var sheet = SpreadsheetApp.getActiveSheet();
var startRow = 2;  // First row of data to process
var numRows = 2;   // Number of rows to process
// Fetch the range of cells A2:B3
var dataRange = sheet.getRange(startRow, 1, numRows, 2)
// Fetch values for each row in the Range.
var data = dataRange.getValues();
for (i in data) {
var row = data[i];
var emailAddress = row[0];  // First column
var message = row[1];       // Second column
var subject = "Sending emails from a Spreadsheet";
MailApp.sendEmail(emailAddress, subject, message);
}
}