【问题标题】:Export different ranges of two different sheets to one single PDF file将两个不同工作表的不同范围导出到一个 PDF 文件
【发布时间】:2021-02-24 01:10:56
【问题描述】:

我尝试从两个不同工作表的两个不同范围导出单个 PDF 文件。 我需要一个带有两个横向站点的打印文档 (PDF)..

站点 1:Sheetname1 - 范围 A1:G17

站点 2:Sheetname2 - 范围 A1:M22

我的代码从工作表中的一个范围生成 PDF 文件到驱动器中的文件夹,然后发送一封电子邮件,并将此文件附加到收件人列表中。但是我不知道如何从两个不同的工作表中导出具有两个不同范围的两个站点的 pdf 文件。

希望有人能帮帮我...

问候

var activeSpreadSheet = SpreadsheetApp.getActiveSpreadsheet();
  var weighingsheet = activeSpreadSheet.getSheetByName("Weighing");
  var datasheet = activeSpreadSheet.getSheetByName("Data");
      
  var url = "https://docs.google.com/spreadsheets/d/" + activeSpreadSheet.getId() + "/export?"
  var params = 'exportFormat=pdf&format=pdf'
    + '&portrait=false'
    + '&fitw=true'
    + '&top_margin=0.50'              
    + '&bottom_margin=0.50'          
    + '&left_margin=0.30'             
    + '&right_margin=0.30'
    + '&horizontal_alignment=CENTER'
    + '&vertical_alignment=MIDDLE'
    + '&gid=' + weighingsheet.getSheetId()
    + '&range=A1:G17';

    var token = ScriptApp.getOAuthToken(); 
    var response = UrlFetchApp.fetch(url + params, { 
    'headers': {
      'Authorization': 'Bearer ' + token
    }
  });  

    var fileName = datasheet.getRange("Q14").getValue() + ".pdf";
    var theBlob = response.getBlob().setName(fileName);
    var folderID = "12345678901234567890";
    var folder = DriveApp.getFolderById(folderID);

    folder.createFile(theBlob);
   
    MailApp.sendEmail(datasheet.getRange("M3").getValue() + ", " + datasheet.getRange("M4").getValue() + ", " + datasheet.getRange("M5").getValue() + ", " + datasheet.getRange("M6").getValue() + ", " + datasheet.getRange("M7").getValue() + ", " + datasheet.getRange("M8").getValue() + ", " + datasheet.getRange("M9").getValue() + ", " + datasheet.getRange("M10").getValue() + ", " + datasheet.getRange("M11").getValue() + ", " + datasheet.getRange("M12").getValue(),
      datasheet.getRange("Q3").getValue(), datasheet.getRange("Q4").getValue(), {attachments:[theBlob]});

【问题讨论】:

    标签: google-apps-script google-sheets export-to-pdf


    【解决方案1】:

    作为一种解决方法,我会使用 HTMLOutput 类

    这是我的方法:

    function test() {
      // Add spreadsheets as needed 
      var spreadsheetsToProcess = [
        {
          spreadsheetId: "ID_SPREADSHEET",
          sheetName: "SHEET NAME",
          rangeA1Notation: "A1:G17"
        },
        {
          spreadsheetId: "ID_SPREADSHEET",
          sheetName: "SHEET NAME",
          rangeA1Notation: "A1:M22"
        }
      ];
    
      var file = getPDF(spreadsheetsToProcess);
    
      MailApp.sendEmail("example@example.com", 'Attachment example', 'Two spreadsheets at once.', {attachments:[file]});
    }
    
    function getPDF(spreadsheets) {
      var html = "<h2>Example 2 ranges from different Spreadsheets</h2>";
      spreadsheets.forEach(spreadsheet => {
        var ss = SpreadsheetApp.openById(spreadsheet.spreadsheetId);
        var sheet = ss.getSheetByName(spreadsheet.sheetName);
        var data = sheet.getRange(spreadsheet.rangeA1Notation).getValues();
    
        html += "<h3>Example</h3><table style='width:100%; border: 1px solid black'>";
        data.forEach(row => {
          html += "<tr style='border: 1px solid black'>";
          row.forEach(cell => {
            html += `<td style='border: 1px solid black'>${cell}</td>`;
          })
          html += "</tr>";
        });
        html += "</table><br/>";
      })
    
      var output = HtmlService.createHtmlOutput(html);
      var pdf = output.getAs('application/pdf').setName("export.pdf");
    
      return pdf;
    }
    

    您可以轻松地将此代码调整为适合您的代码,其中 test 将发送邮件,getPDF 将期望由spreadsheetIdsheetName 组成的对象数组和rangeA1Notation。 HTMLService 类将允许您从字符串创建 HTMLOutput,然后您可以根据需要对其进行自定义。获得此 HTML 后,您可以使用 getAs 方法将其转换为 PDF,该方法将返回您可以通过 MailApp 发送的 Blob。

    【讨论】:

    • 嘿何塞,谢谢您的回答...但我想要与工作表相同的布局和颜色、字体等设置。不是新的可调整 html 对象。他们有办法做到这一点吗?
    • 当您引用 Site 1: Sheetname1 - Range A1:G17 时,站点 1 部分是指电子表格 1?
    猜你喜欢
    • 2014-08-25
    • 2022-06-15
    • 1970-01-01
    • 2018-04-16
    • 2020-01-12
    • 2023-03-11
    • 2012-07-16
    • 1970-01-01
    • 2015-10-12
    相关资源
    最近更新 更多