请求修改Google Apps Script,使邮件附件PDF使用工作表名/自定义名称而非电子表格名
请求修改Google Apps Script,使邮件附件PDF使用工作表名/自定义名称而非电子表格名
看起来你已经离目标很近啦!问题出在你当前用的是整个电子表格的名称作为PDF文件名,而不是指定工作表的名称。咱们一步步调整,满足你的不同需求:
方案1:用指定工作表(Park Letter)的名称作为PDF文件名
你只需要把获取名称的对象从「整个电子表格」改成「目标工作表」,同时修正代码里一个小错误(mimeType里多了一个斜杠)。修改后的完整代码如下:
function Email3() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var ssID = ss.getId(); // 改成获取目标工作表的名称,而非整个电子表格的名称 var sheetName = ss.getSheetByName("Park Letter").getName(); var emailRange = ss.getSheetByName("Park Letter").getRange("F20"); var emailAddress = emailRange.getValue(); var subject = "Coffee Morning"; var body = ("Attached is a letter about the up coming Coffee Morning. \n \nMany thanks, \n \nCoast and Country Parks"); var requestData = {"method": "GET", "headers":{"Authorization":"Bearer "+ScriptApp.getOAuthToken()}}; var shID = getSheetID("Park Letter"); var url = "https://docs.google.com/spreadsheets/d/"+ ssID + "/export?format=pdf&id="+ssID+"&gid="+shID; var result = UrlFetchApp.fetch(url , requestData); var contents = result.getContent(); // 修正mimeType的错误:把application//pdf改成application/pdf MailApp.sendEmail (emailAddress, subject ,body, { attachments:[{ fileName: sheetName + ".pdf", content: contents, mimeType: "application/pdf" }] }); }; function getSheetID(name){ var ss = SpreadsheetApp.getActive().getSheetByName(name); var sheetID = ss.getSheetId().toString(); return sheetID; }
方案2:用自定义固定名称作为PDF文件名
如果想直接指定一个你想要的固定名称(比如「Coffee_Morning_Invite.pdf」),不需要依赖工作表名,直接在fileName里写死即可:
// 替换邮件发送部分的附件代码 MailApp.sendEmail (emailAddress, subject ,body, { attachments:[{ fileName: "Coffee_Morning_Invite.pdf", content: contents, mimeType: "application/pdf" }] });
方案3:用工作表中某个单元格的值作为PDF文件名
如果想从工作表的某个单元格里读取文件名(比如「Park Letter」工作表的B2单元格),可以先获取该单元格的值,再作为文件名使用:
function Email3() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var ssID = ss.getId(); var targetSheet = ss.getSheetByName("Park Letter"); // 从B2单元格读取文件名,你可以改成任意需要的单元格地址 var customFileName = targetSheet.getRange("B2").getValue(); var emailRange = targetSheet.getRange("F20"); var emailAddress = emailRange.getValue(); var subject = "Coffee Morning"; var body = ("Attached is a letter about the up coming Coffee Morning. \n \nMany thanks, \n \nCoast and Country Parks"); var requestData = {"method": "GET", "headers":{"Authorization":"Bearer "+ScriptApp.getOAuthToken()}}; var shID = getSheetID("Park Letter"); var url = "https://docs.google.com/spreadsheets/d/"+ ssID + "/export?format=pdf&id="+ssID+"&gid="+shID; var result = UrlFetchApp.fetch(url , requestData); var contents = result.getContent(); // 使用单元格的值作为文件名,记得加上.pdf后缀 MailApp.sendEmail (emailAddress, subject ,body, { attachments:[{ fileName: customFileName + ".pdf", content: contents, mimeType: "application/pdf" }] }); }; function getSheetID(name){ var ss = SpreadsheetApp.getActive().getSheetByName(name); var sheetID = ss.getSheetId().toString(); return sheetID; }
另外提醒下:原代码里的mimeType写的是"application//pdf"(两个斜杠),这是个小错误,已经在上面的代码里修正为"application/pdf",避免附件识别出问题。
备注:内容来源于stack exchange,提问作者V Allan
相关产品推荐
相关产品推荐

