【问题标题】:Save a sheet as pdf with onEdit()使用 onEdit() 将工作表另存为 pdf
【发布时间】:2017-03-03 08:28:13
【问题描述】:

我正在尝试将 Google 电子表格另存为 pdf,并在每次编辑电子表格中的特定单元格时将其邮寄给自己。我有将电子表格保存为 pdf 并通过电子邮件发送的脚本,它可以工作,而且我还有一个 onEdit(e) 脚本,它完全符合我的要求。但是当我把它们放在一起时,它不起作用。这是脚本:

function onEdit(e) {
  var sheet1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("booking");
  var index = sheet1.getRange('O5').getValue();
  if(index == '#N/A') return;
   
  var email = "myemail@gmail.com";
  var subject = "Subject";
  
  var sheet3 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Invoice_ENG");
  var pdfname = ("PDF.pdf"); 
  var message = ("Hello!");
        
  //Since I can't export only one sheet, I create a new spreadsheet, copy the sheet
  //into the new spreadsheet and save the new spreadsheet as pdf
  var newSpreadsheet = SpreadsheetApp.create("Spreadsheet to export");
  sheet3.copyTo(newSpreadsheet);
        
  //I erase the default Sheet1 from the new Spreadsheet
  var ss = newSpreadsheet.getSheetByName('Sheet1');
  ss.activate();
  newSpreadsheet.deleteActiveSheet();
        
  //Create pdf --- THIS IS WHERE THE SCRIPT SOMEHOW STOPS!
  var pdf = DriveApp.getFileById(newSpreadsheet.getId()).getAs('application/pdf').getBytes();
  var attach = {fileName:pdfname,content:pdf, mimeType:'application/pdf'};
        
  //Send mail
  GmailApp.sendEmail(email, subject, message, {attachments:[attach]});
        
  //Erase the newly created spreadsheet
  DriveApp.getFileById(newSpreadsheet.getId()).setTrashed(true);
}

“导出为 pdf”任务是否需要使用 onEdit 函数完成?因为我在另一个每天触发的脚本中做同样的事情,而且效果很好。

【问题讨论】:

    标签: pdf google-apps-script google-sheets eventtrigger


    【解决方案1】:

    您应该使用可安装的 onEdit 触发器,因为使用简单触发器无法发送电子邮件。

    ScriptApp.newTrigger("onEdit")
       .forSpreadsheet(SpreadsheetApp.getActive())
       .onEdit()
       .create();
    

    【讨论】:

      【解决方案2】:
      //Since I can't export only one sheet, I create a new spreadsheet, copy the sheet
        //into the new spreadsheet and save the new spreadsheet as pdf
        var newSpreadsheet = SpreadsheetApp.create("Spreadsheet to export");
        sheet3.copyTo(newSpreadsheet);
      
        //I erase the default Sheet1 from the new Spreadsheet
        var ss = newSpreadsheet.getSheetByName('Sheet1');
        ss.activate();
        newSpreadsheet.deleteActiveSheet();
      

      我相信 activate 是一种适用于工作表而不适用于电子表格的方法。您可以从 SpreadsheetApp 打开电子表格。

      //Create pdf --- THIS IS WHERE THE SCRIPT SOMEHOW STOPS!
        var pdf = DriveApp.getFileById(newSpreadsheet.getId()).getAs('application/pdf').getBytes();
        var attach = {fileName:pdfname,content:pdf, mimeType:'application/pdf'};
      

      我相信您需要在这两个语句之间使用 DriveApp 创建 pdf 文件。可以使用 DriveApp.createFile

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-09-22
        • 1970-01-01
        • 2015-08-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-21
        相关资源
        最近更新 更多