谷歌应用程序从电子表格中以PDF格式编写电子邮件脚本



我下面用于生成PDF附件的代码运行良好,但它们会发送电子表格中的所有数据。

任何人都可以帮助只发送指定的电子表格,比如我的代码专用表";电子邮件";而不是所有的床单?谢谢

function SendEmail() {
try {
var ss  = SpreadsheetApp.getActive();
var url = "https://docs.google.com/feeds/download/spreadsheets/Export?key=" + ss.getId() + "&exportFormat=pdf";
var params = {
method      : "get",
headers     : {"Authorization": "Bearer " + ScriptApp.getOAuthToken()},
muteHttpExceptions: true
};
var blob = UrlFetchApp.fetch(url, params).getBlob();
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Email')
var subjectrange = sheet.getRange("A20");
var subjectdata = subjectrange.getValues();
var emailranges=sheet.getRange('E14');
var emaildata=emailranges.getValue();
var username=ss.getSheetId();
blob.setName(ss.getName()+ ".pdf");
var confirm = Browser.msgBox('Send Email Confirmation','Are you sure you want to send this mail for booking request ?', Browser.Buttons.OK_CANCEL);
if(confirm=='ok') {
MailApp.sendEmail(emaildata, subjectdata, " Attachment file is:  n"  +subjectdata+ "- n Kindly reply your booking to this email . n Thank you - ADS Co., Ltd", {attachments: [blob]}) };} catch (f) {Logger.log(f.toString());
}
}

答案

如果你不想导出一些sheets,你可以隐藏它们。此外,您可以使用getBlob方法导出Spreadsheet。一旦进行了导出,就可以撤消隐藏。

假设两张纸的小代码

var sheet = ss.getSheetByName('Unwanted Sheet')
sheet.hideSheet()
var blob = ss.getBlob()
blob.setName(ss.getName())
sheet.showSheet()

使用多张图纸的完整代码

function exportSheet(sheetName) {    
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheets = ss.getSheets();
for (var i = 0; i < sheets.length; i++) {
if (sheets[i].getSheetName() !== sheetName) {
sheets[i].hideSheet()
} 
}
var blob = ss.getBlob()
blob.setName(ss.getName())
for (var i = 0; i < sheets.length; i++) {
sheets[i].showSheet()
}
}

一些提示

  • 您不必将.pdf添加到blob名称中,它已经知道这是一个pdf文件,扩展名将自动显示
  • 您可以使用GmailApp服务而不是MailApp,因为它更通用,功能更多。使用MailApp的主要原因是使用,它不需要开发者是Gmail用户

参考

  • hideSheet
  • showSheet
  • getBlob
  • GmailApp
  • MailApp

最新更新