谷歌表格应用程序脚本,如何格式化保存到谷歌驱动器的pdf?

时间:2021-01-07 10:54:53

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

我正在使用此脚本将当前选项卡以 pdf 格式保存到特定文件夹

function SaveAsPDF() {

  SpreadsheetApp.flush();
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sourceSpreadsheet = SpreadsheetApp.getActive(); // Get active spreadsheet.
  var sheetName = sourceSpreadsheet.getActiveSheet().getName();
  var pdfName = sheetName + ".pdf"; // Set the output filename as SheetName.

  folder = DriveApp.getFolderById('ID');

  var theBlob = createblobpdf(sheetName, pdfName);



  var existing = folder.getFilesByName(pdfName); //returns file iterator;
  var hasFile = existing.hasNext(); //check if iterator isn't empty;
  if (hasFile) {
    var duplicate = existing.next(); //access file;

    //delete file;
    var durl = 'https://www.googleapis.com/drive/v3/files/' + duplicate.getId();
    var token = ScriptApp.getOAuthToken();
    var dres = UrlFetchApp.fetch(durl, {
      method: 'delete',
      muteHttpExceptions: true,
      headers: { 'Authorization': 'Bearer ' + token }
    });
    if (dres.getResponseCode() >= 400) {
      //handle errors;
    }
  }

  var newFile = folder.createFile(theBlob);
  sourceSpreadsheet.toast("Saved ", "Success");

}

function createblobpdf(sheetName, pdfName) {
  var sourceSpreadsheet = SpreadsheetApp.getActive();
  var sourceSheet = sourceSpreadsheet.getSheetByName(sheetName);
  var url = 'https://docs.google.com/spreadsheets/d/' + sourceSpreadsheet.getId()
    + '/export'
    + '?format=pdf'
    + '&size=letter' // paper size legal / letter / A4
    + '&portrait=true' // orientation, false for landscape
    + '&scale=4'  // 1= Normal 100% / 2= Fit to width / 3= Fit to height / 4= Fit to Page
    + '&fitw=true'                   // fit to width, false for actual size
    + '&top_margin=1.00'              // All four margins must be set!
    + '&bottom_margin=0.00'           // All four margins must be set!
    + '&left_margin=2.00'             // All four margins must be set!
    + '&right_margin=0.00'            // All four margins must be set!
    + '&sheetnames=true&printtitle=false' // hide optional headers and footers
    + '&pagenum=RIGHT&gridlines=false' // hide page numbers and gridlines
    + '&fzr=false' // do not repeat row headers (frozen rows) on each page
    + '&horizontal_alignment=CENTER' //LEFT/CENTER/RIGHT
    + '&vertical_alignment=TOP' //TOP/MIDDLE/BOTTOM
    + '&gid=' + sourceSheet.getSheetId(); // the sheet's Id
  var token = ScriptApp.getOAuthToken();
  // request export url
  var response = UrlFetchApp.fetch(url, {
    headers: {
      'Authorization': 'Bearer ' + token
    }
  });
  var theBlob = response.getBlob().setName(pdfName);
  return theBlob;
};

我的问题是我无法格式化 pdf,我一直在尝试不同的方法,但就像没有响应我的更改(大小、比例、边距 fzr=false 等)我做错了什么吗? 我需要的主要是适合字母大小的高度

有什么帮助吗?

1 个答案:

答案 0 :(得分:0)

您的 pdf 格式代码工作正常

错误一定在别处。

请注意,您有一个循环,可以在创建新文件之前检查文件是否已经存在。大多数情况下,您没有创建新文件,因为文件已经存在。

试试下面的代码:

sched_process_free

它会在您的云端硬盘的根目录中创建一个名为 function SaveAsPDF() { SpreadsheetApp.flush(); var ss = SpreadsheetApp.getActiveSpreadsheet(); var sourceSpreadsheet = SpreadsheetApp.getActive(); // Get active spreadsheet. var sheetName = sourceSpreadsheet.getActiveSheet().getName(); var pdfName = "thisFileisNew.pdf"; // Set the output filename as SheetName. // folder = DriveApp.getFolderById('ID'); var theBlob = createblobpdf(sheetName, pdfName); var newFile = DriveApp.createFile(theBlob); sourceSpreadsheet.toast("Saved ", "Success"); } function createblobpdf(sheetName, pdfName) { var sourceSpreadsheet = SpreadsheetApp.getActive(); var sourceSheet = sourceSpreadsheet.getSheetByName(sheetName); var url = 'https://docs.google.com/spreadsheets/d/' + sourceSpreadsheet.getId() + '/export' + '?format=pdf' + '&size=A4' // paper size legal / letter / A4 + '&portrait=false' // orientation, false for landscape + '&scale=4' // 1= Normal 100% / 2= Fit to width / 3= Fit to height / 4= Fit to Page + '&fitw=true' // fit to width, false for actual size + '&top_margin=1.00' // All four margins must be set! + '&bottom_margin=0.00' // All four margins must be set! + '&left_margin=2.00' // All four margins must be set! + '&right_margin=0.00' // All four margins must be set! + '&sheetnames=true&printtitle=false' // hide optional headers and footers + '&pagenum=RIGHT&gridlines=false' // hide page numbers and gridlines + '&fzr=false' // do not repeat row headers (frozen rows) on each page + '&horizontal_alignment=CENTER' //LEFT/CENTER/RIGHT + '&vertical_alignment=TOP' //TOP/MIDDLE/BOTTOM + '&gid=' + sourceSheet.getSheetId(); // the sheet's Id var token = ScriptApp.getOAuthToken(); // request export url var response = UrlFetchApp.fetch(url, { headers: { 'Authorization': 'Bearer ' + token } }); var theBlob = response.getBlob().setName(pdfName); return theBlob; }; 的文件 - 我将格式设置为横向,因此您可以更轻松地看到格式的更改。