【问题标题】:Send PDF Attachment of Active Sheet with Email Cell Reference in Same Active Sheet在同一活动工作表中发送活动工作表的 PDF 附件以及电子邮件单元格参考
【发布时间】:2021-03-05 20:55:28
【问题描述】:

我正在尝试将活动工作表和仅活动工作表作为 pdf 附件发送到位于单元格 C1 或 (1,3) 中的电子邮件

当前脚本执行,但我没有收到电子邮件。

function sendSheetToPdf(){
}
var ss = SpreadsheetApp.getActiveSpreadsheet();
var ssId = SpreadsheetApp.getActiveSpreadsheet().getId();
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var sheetName = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getName();
var email = sheet.getRange(1,3).getValue();

// Base URL
var url = "mysheetsurl", ss.getId());

/* Specify PDF export parameters
From: https://code.google.com/p/google-apps-script-issues/issues/detail?id=3579
 */

var url_ext = 'exportFormat=pdf&format=pdf' // export as pdf / csv / xls / xlsx
     + '&size=A4' // paper size legal / letter / A4
     + '&portrait=true' // orientation, false for landscape
     + '&fitw=true&source=labnol' // fit to page width, false for actual size
     + '&sheetnames=false&printtitle=false' // hide optional headers and footers
     + '&pagenumbers=false&gridlines=false' // hide page numbers and gridlines
     + '&fzr=false' // do not repeat row headers (frozen rows) on each page
     + '&gid='; // the sheet's Id

var token = ScriptApp.getOAuthToken();

var response = UrlFetchApp.fetch(url + url_ext + sheet.getSheetId(), {                                 
        headers : {
            'Authorization' : 'Bearer ' + token
        }
    }).getBlob().setName(sheet.getName() + ".pdf");

sheet_as_pdf_blob_document=response;


// Email Business
var recipient = email;
var subject="Test"
var body="TEST.";
var nameOfSender="Test";

// Here we send the email

function sendReport() {
 
   var message = {
    to: recipient,
    subject: subject,
    body: body,
    name: nameOfSender,
    attachments: [sheet_as_pdf_blob_document]
  }

   MailApp.sendEmail(message);
}

我之前编写过成功发送电子邮件的脚本,但从未指定工作表名称和电子邮件地址。这次我想创建一种基于活动工作表发送电子邮件的动态方式。提前致谢!

【问题讨论】:

    标签: email pdf google-apps-script gmail


    【解决方案1】:

    您当前代码中的问题:

    1. 您的函数结构不正确。在编辑器中运行时,您的代码应该会显示失败的执行日志。

    如下所示:

    function sendSheetToPdf(){
    }
    
    // process the sheet data and get pdf blob
    
    function sendReport() {
    
      //send email
    }
    
    1. 您的基本网址不正确。根据您的参考资料Specify PDF export parameters,您的基本网址应该是这样的:

      var url = "https://docs.google.com/spreadsheets/d/" + doc.getId() + "/export?


    示例工作代码:

    function sendSheetToPdf(){
    
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var ssId = SpreadsheetApp.getActiveSpreadsheet().getId();
      var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
      var sheetName = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getName();
      var email = sheet.getRange(1,3).getValue();
    
      // Base URL
      var url = "https://docs.google.com/spreadsheets/d/"+ ss.getId()+"/export?";
      
      /* Specify PDF export parameters
      From: https://code.google.com/p/google-apps-script-issues/issues/detail?id=3579
      */
    
      var url_ext = 'exportFormat=pdf&format=pdf' // export as pdf / csv / xls / xlsx
          + '&size=A4' // paper size legal / letter / A4
          + '&portrait=true' // orientation, false for landscape
          + '&fitw=true&source=labnol' // fit to page width, false for actual size
          + '&sheetnames=false&printtitle=false' // hide optional headers and footers
          + '&pagenumbers=false&gridlines=false' // hide page numbers and gridlines
          + '&fzr=false' // do not repeat row headers (frozen rows) on each page
          + '&gid='; // the sheet's Id
    
      var token = ScriptApp.getOAuthToken();
    
      var response = UrlFetchApp.fetch(url + url_ext + sheet.getSheetId(), {                                 
              headers : {
                  'Authorization' : 'Bearer ' + token
              }
          }).getBlob().setName(sheet.getName() + ".pdf");
    
      var sheet_as_pdf_blob_document=response;
    
    
      // Email Business
      var recipient = email;
      var subject="Test"
      var body="TEST.";
      var nameOfSender="Test";
    
      // Here we send the email
    
      var message = {
      to: recipient,
      subject: subject,
      body: body,
      name: nameOfSender,
      attachments: [sheet_as_pdf_blob_document]
      }
    
      MailApp.sendEmail(message);
       
    }
    
    • 我刚刚修复了您的base url,将sendReport() 内容移到sendSheetToPdf() 中,因为发送电子邮件所需的变量在sendSheetToPdf() 中声明。

    输出:

    【讨论】:

      猜你喜欢
      • 2021-04-21
      • 1970-01-01
      • 2017-07-06
      • 1970-01-01
      • 1970-01-01
      • 2020-09-07
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      相关资源
      最近更新 更多