首页 > 解决方案 > 使用 Google Apps 脚本从 Google 表格导出 PDF 时的 setName

问题描述

我有这个脚本可以使用 Google Apps 脚本将三个单独的工作表导出为 PDF,除了在每种情况下使用 export.pdf 的文件名导出 PDF 之外,它工作正常。我想将它们分别重命名为“昨天”、“过去 7 天”和“过去 30 天”,有人可以帮我实现吗?

//Menu in Google Sheet

function onOpen() {

 var ui = SpreadsheetApp.getUi();

 ui.createMenu('Dashboard')

   .addItem('Email Dashboard','emailDashboard')

   .addToUi();

}

//Convert dashboard to PDF and email a copy to user
function emailDashboard() {

 // get sheet id

 var ss = SpreadsheetApp.getActiveSpreadsheet();

 var id = ss.getId();

 // setup sheets
 var yesterdaySheet = ss.getSheetByName('Yesterday');
 var last7DaysSheet = ss.getSheetByName('Last 7 Days');
 var last30DaysSheet = ss.getSheetByName('Last 30 Days');
 var settingsSheet = ss.getSheetByName('Settings');
 var dashboardURL = ss.getUrl() + "?usp=sharing";

 // Send the PDF of the spreadsheet to this email address
 // get this from the settings sheet
 var email = settingsSheet.getRange(8,2).getValue();
 var cc_email = settingsSheet.getRange(9,2).getValue();
 var bcc_email = settingsSheet.getRange(10,2).getValue();

 // Subject of email message
 var subject = "Dashboard PDF generated from " + ss.getName() + " - " + new Date().toLocaleString(); 

 // Email Body
 var body = `A pdf copy of your dashboard is attached.<br><br>

  To access this Google Sheet,; 
   <a href="` + dashboardURL + `" >click here</a>`;


 // Base URL
 var url = "https://docs.google.com/spreadsheets/d/" + id + "/export?";
 var url_ext = 'exportFormat=pdf&format=pdf&size=A4&portrait=false&fitw=true&gid=';
  
 // Auth value
 var token = ScriptApp.getOAuthToken();

 var options = { 

  headers: { 'Authorization': 'Bearer ' + token }

   }

 // helps initialize first time using the script
 var driveCall = DriveApp.getRootFolder();  

 // create the pdf
 var responseYesterday = UrlFetchApp.fetch(url + url_ext + yesterdaySheet.getSheetId(), options);
 var response7Days = UrlFetchApp.fetch(url + url_ext + last7DaysSheet.getSheetId(), options);
 var response30Days = UrlFetchApp.fetch(url + url_ext + last30DaysSheet.getSheetId(), options);
 

 // send the email with the PDF attachment
 GmailApp.sendEmail(email, subject, body, {
  cc: cc_email,
  bcc: bcc_email,
  htmlBody: body,
  attachments:[responseYesterday,response7Days, response30Days]   
 });
}

标签: pdfgoogle-apps-scriptgoogle-sheets

解决方案


解释:

只需在 pdf 创建部分之后添加以下三行:

var blob_Y = responseYesterday.getBlob().setName('Yesterday' + '.pdf');
var blob_L7D = response7Days.getBlob().setName('Last 7 Days' + '.pdf');
var blob_L30D = response30Days.getBlob().setName('Last 30 Days' + '.pdf');

然后改变这部分:

 GmailApp.sendEmail(email, subject, body, {
  cc: cc_email,
  bcc: bcc_email,
  htmlBody: body,
  attachments:[blob_Y, blob_L7D, blob_L30D ]   
 });

解决方案:

//Menu in Google Sheet

function onOpen() {

 var ui = SpreadsheetApp.getUi();

 ui.createMenu('Dashboard')

   .addItem('Email Dashboard','emailDashboard')

   .addToUi();

}

//Convert dashboard to PDF and email a copy to user
function emailDashboard() {

 // get sheet id

 var ss = SpreadsheetApp.getActiveSpreadsheet();

 var id = ss.getId();

 // setup sheets
 var yesterdaySheet = ss.getSheetByName('Yesterday');
 var last7DaysSheet = ss.getSheetByName('Last 7 Days');
 var last30DaysSheet = ss.getSheetByName('Last 30 Days');
 var settingsSheet = ss.getSheetByName('Settings');
 var dashboardURL = ss.getUrl() + "?usp=sharing";

 // Send the PDF of the spreadsheet to this email address
 // get this from the settings sheet
 var email = settingsSheet.getRange(8,2).getValue();
 var cc_email = settingsSheet.getRange(9,2).getValue();
 var bcc_email = settingsSheet.getRange(10,2).getValue();

 // Subject of email message
 var subject = "Dashboard PDF generated from " + ss.getName() + " - " + new Date().toLocaleString(); 

 // Email Body
 var body = `A pdf copy of your dashboard is attached.<br><br>

  To access this Google Sheet,; 
   <a href="` + dashboardURL + `" >click here</a>`;


 // Base URL
 var url = "https://docs.google.com/spreadsheets/d/" + id + "/export?";
 var url_ext = 'exportFormat=pdf&format=pdf&size=A4&portrait=false&fitw=true&gid=';
  
 // Auth value
 var token = ScriptApp.getOAuthToken();

 var options = { 

  headers: { 'Authorization': 'Bearer ' + token }

   }

 // helps initialize first time using the script
 var driveCall = DriveApp.getRootFolder();  

 // create the pdf
 var responseYesterday = UrlFetchApp.fetch(url + url_ext + yesterdaySheet.getSheetId(), options);
 var response7Days = UrlFetchApp.fetch(url + url_ext + last7DaysSheet.getSheetId(), options);
 var response30Days = UrlFetchApp.fetch(url + url_ext + last30DaysSheet.getSheetId(), options);

 var blob_Y = responseYesterday.getBlob().setName('Yesterday' + '.pdf');
 var blob_L7D = response7Days.getBlob().setName('Last 7 Days' + '.pdf');
 var blob_L30D = response30Days.getBlob().setName('Last 30 Days' + '.pdf');
 

 GmailApp.sendEmail(email, subject, body, {
 cc: cc_email,
 bcc: bcc_email,
 htmlBody: body,
 attachments:[blob_Y, blob_L7D, blob_L30D ]   
 });
 }
 

推荐阅读