首页 > 解决方案 > 谷歌表格应用程序脚本,如何格式化保存到谷歌驱动器的 pdf?

问题描述

我使用此脚本将当前选项卡另存为 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 等)我做错了什么?我需要的主要是适合字母大小的高度

请问有什么帮助吗?

标签: emailpdfgoogle-apps-scriptgoogle-sheets

解决方案


您用于格式化 pdf 的代码可以正常工作

错误必须在其他地方。

请注意,您有一个循环在创建新文件之前检查文件是否已经存在。最可能的是,由于文件已经存在,您没有创建新文件。

试试下面的代码:

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;
};

它将在您的驱动器的根目录中创建一个名为的文件thisFileisNew.pdf- 我将格式设置为横向,因此您可以更轻松地看到格式的更改。


推荐阅读