Google Sheet: Generate a PDF file within a named range and sent it to email

女生的网名这么多〃 提交于 2020-11-29 10:35:53

问题


I'm trying to send a PDF file via email. I saw a code here on how to send an email and it kinda works, but it generates all the visible sheets (hidden sheet is not included) in the PDF file. I already modified it to generate the active sheet but all the data on that sheet is still visible. I have a named range and it's called "print_area_1". Is it possible if I only want to show the "print_area_1" part on the PDF file?

Here's my modified code for it.

function sendSheetToPdfwithA1MailAdress(){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sh = ss.getActiveSheet();
  var shName = sh.getName()
  sendSpreadsheetToPdf(0, shName, sh.getRange('Q12').getValue(), sh.getRange('D12').getValue() , "This is it !");
}
function sendSpreadsheetToPdf(sheetNumber, pdfName, email,subject, htmlbody, url, sheet, range) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  var spreadsheetId = ss.getId()  
  var url_base = ss.getUrl().replace(/edit$/,'');

  var rangeParam = ''
  var sheetParam = ''
  if (range) {
    rangeParam = 
      + '&r1=' + (range.getRow() - 1)
      + '&r2=' + range.getLastRow()
      + '&c1=' + (range.getColumn() - 1)
      + '&c2=' + range.getLastColumn()
  }
  if (sheet) {
    sheetParam = '&gid=' + sheet.getSheetId()
  }
 
  var url_ext = 'export?exportFormat=pdf&format=pdf'
      + '&size=folio'
      + '&portrait=true'
      + '&fitw=true'
      + '&top_margin=0.5'              
      + '&bottom_margin=0.5'          
      + '&left_margin=0.5'             
      + '&right_margin=0.5'        
      + '&sheetnames=false&printtitle=false&pagenumbers=false'
      + '&gridlines=true'
      + '&fzr=false'
      + sheetParam
      + rangeParam;

  var options = {
    headers: {
      'Authorization': 'Bearer ' +  ScriptApp.getOAuthToken(),
    }
  }

  var response = UrlFetchApp.fetch(url_base + url_ext, options);
  var blob = response.getBlob().setName(pdfName + '.pdf');
  if (email) {
    var mailOptions = {
      attachments:blob, htmlBody:htmlbody
    }
MailApp.sendEmail(
      email, 
      subject+" (" + pdfName +")", 
      "html content only", 
      mailOptions);
  }
}

回答1:


I just added this script / variable to make it work.

var range = SpreadsheetApp.getActiveSpreadsheet().getRangeByName('print_area_1');

Here's the full code:

function sendSheetToPdfwithA1MailAdress(){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sh = ss.getActiveSheet();
  var shName = sh.getName()
  sendSpreadsheetToPdf(0, shName, sh.getRange('Q12').getValue(), sh.getRange('D12').getValue() , "This is it !");
}
function sendSpreadsheetToPdf(sheetNumber, pdfName, email,subject, htmlbody, url, sheet, range) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  var spreadsheetId = ss.getId()  
  var url_base = ss.getUrl().replace(/edit$/,'');

  var rangeParam = ''
  var sheetParam = ''
  if (range) {
    rangeParam = 
      + '&r1=' + (range.getRow() - 1)
      + '&r2=' + range.getLastRow()
      + '&c1=' + (range.getColumn() - 1)
      + '&c2=' + range.getLastColumn()
  }
  if (sheet) {
    sheetParam = '&gid=' + sheet.getSheetId()
  }
 
  var url_ext = 'export?exportFormat=pdf&format=pdf'
      + '&size=folio'
      + '&portrait=true'
      + '&fitw=true'
      + '&top_margin=0.5'              
      + '&bottom_margin=0.5'          
      + '&left_margin=0.5'             
      + '&right_margin=0.5'        
      + '&sheetnames=false&printtitle=false&pagenumbers=false'
      + '&gridlines=true'
      + '&fzr=false'
      + sheetParam
      + rangeParam;

  var options = {
    headers: {
      'Authorization': 'Bearer ' +  ScriptApp.getOAuthToken(),
    }
  }

  var response = UrlFetchApp.fetch(url_base + url_ext, options);
  var blob = response.getBlob().setName(pdfName + '.pdf');
  if (email) {
    var mailOptions = {
      attachments:blob, htmlBody:htmlbody
    }
MailApp.sendEmail(
      email, 
      subject+" (" + pdfName +")", 
      "html content only", 
      mailOptions);
  }
}


来源:https://stackoverflow.com/questions/64762224/google-sheet-generate-a-pdf-file-within-a-named-range-and-sent-it-to-email

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!