使用脚本导出 google sheet 内的单个 sheet 并设置页面高度

Using script to export individual sheets inside a google sheet AND set page height

我有一个 google sheet,里面有 25 个 sheets/tabs。我需要能够将每个单独导出为 pdf 并理想地用他们个人的名字重命名它们 sheet.

除了我的文档对于单个页面而言太长的几行之外,以下代码工作得很好。

我尝试过使用缩放功能和设置页边距,但两个选项都没有改变我最终导出的文件。

有没有办法打印到我页面的高度或缩放导出的 pdf?

function exportSheetsAsPDFs() {
SpreadsheetApp.getActiveSpreadsheet().toast('Writing the reports.','Printing Reports');
 
var email = Session.getActiveUser().getEmail();
var TodayDate = new Date();
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheets = ss.getSheets();
 
// Show one sheet at a time, and print each one out as a PDF
for (var i = 0; i < sheets.length; i++) {
sheets[i].showSheet();
 
// Hide all sheets except for our currently active one.
for (var j = 0; j < sheets.length; j++) {
if (j != i) {
sheets[j].hideSheet();
}
}
 
// Ensure all hide / show changes are applied
SpreadsheetApp.flush();
   
// Export PDF
DriveApp.createFile(ss.getBlob().getAs('application/pdf').setName("My File Name - " + sheets[i].getName() + '.pdf'));
}
 
// Re-show all sheets
for (var i = 0; i < sheets.length; i++) {
sheets[i].showSheet();
}
SpreadsheetApp.getActiveSpreadsheet().toast('Reports all written.','Printing Complete');
}

我建议您使用 UrlFetchApp.fetch 导出 sheet 数据并传递一些 url 参数,因为它使您能够在驱动器中创建 pdf 之前对其进行修改。

只需 fiddle 和下面的 url 参数,看看您需要什么。应该对每个参数的作用进行充分的描述。根据您选择的参数,您可以执行以下操作来解决您的问题:

  • 更改 pdf 大小(更改为更长的大小、a3、a4 等)
  • 调整 pdf 的页边距(如果它解决了您的问题,您可以减少顶部和底部页边距)
  • 调整 pdf 中数据的比例(缩放到高度、宽度、页面或正常,具体取决于您的需要)

代码:

function exportSheetsAsPDFs() {
  SpreadsheetApp.getActiveSpreadsheet().toast('Writing the reports.', 'Printing Reports');

  var email = Session.getActiveUser().getEmail();
  var TodayDate = new Date();
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheets = ss.getSheets();

  // Show one sheet at a time, and print each one out as a PDF
  for (var i = 0; i < sheets.length; i++) {
    sheets[i].showSheet();

    // Hide all sheets except for our currently active one.
    for (var j = 0; j < sheets.length; j++) {
      if (j != i) {
        sheets[j].hideSheet();
      }
    }

    // Ensure all hide / show changes are applied
    SpreadsheetApp.flush();

    // Exporting PDF (using getBlob function below)
    var theBlob = getBlob(sheets[i]);
    DriveApp.createFile(theBlob).setName("My File Name - " + sheets[i].getName() + ".pdf");
  }

  // Re-show all sheets
  for (var i = 0; i < sheets.length; i++) {
    sheets[i].showSheet();
  }
  SpreadsheetApp.getActiveSpreadsheet().toast('Reports all written.', 'Printing Complete');
}

function getBlob(sheet) {
  var url = 'https://docs.google.com/spreadsheets/d/';
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var id = spreadsheet.getId();
  var gid = sheet.getSheetId();
  var url_ext = '/export?'
    + 'format=pdf'
    + '&size=a4'                      //A3/A4/A5/B4/B5/letter/tabloid/legal/statement/executive/folio
    + '&portrait=true'                //true= Potrait / false= Landscape
    + '&scale=3'                      //1= Normal 100% / 2= Fit to width / 3= Fit to height / 4= Fit to Page
    + '&top_margin=0.00'              //All four margins must be set!
    + '&bottom_margin=0.00'           //All four margins must be set!
    + '&left_margin=0.00'             //All four margins must be set!
    + '&right_margin=0.00'            //All four margins must be set!
    + '&gridlines=true'               //true/false
    + '&printnotes=false'             //true/false
    + '&pageorder=2'                  //1= Down, then over / 2= Over, then down
    + '&horizontal_alignment=LEFT'    //LEFT/CENTER/RIGHT
    + '&vertical_alignment=TOP'       //TOP/MIDDLE/BOTTOM
    + '&printtitle=false'             //true/false
    + '&sheetnames=false'             //true/false
    + '&fzr=false'                    //true/false
    + '&fzc=false'                    //true/false
    + '&attachment=false'
    + '&gid='
    + gid;

  var token = ScriptApp.getOAuthToken();
  var params = {
    headers: {
      'Authorization': 'Bearer ' + token
    }
  };

  var blob = UrlFetchApp.fetch(url + id + url_ext, params).getBlob().getAs('application/pdf');
  return blob;
}

摆弄比例参数

比例 = 1(正常 100%):

正常缩放导致溢出

比例 = 3(适合高度):

注:

  • 由于我的示例数据的结构,适合高度 (3) 和适合页面 (4) 产生相同的格式。
  • 注意到宽度的不同了吗?那是因为它适合高度。
  • Fiddle 使用参数查看和查找您需要的内容。

参考文献: