将工作表另存为 PDF

时间:2021-06-06 15:18:46

标签: pdf google-sheets

我的工作表有问题。我尝试将工作表转换为 PDF。 该脚本工作得非常好,我唯一的问题是该工作表由三个电子表格组成。我只想将第一个电子表格转换为 PDF。一些任何想法

//If a sheet ID was provided, open that sheet, otherwise assume script is
//sheet-bound, and open the active spreadsheet.
var ss = (optSSId) ? SpreadsheetApp.openById(optSSId) : SpreadsheetApp.getActiveSpreadsheet();
//Get URL of spreadsheet, and remove the trailing 'edit'
var url = ss.getUrl().replace(/edit$/,'');
//Get folder containing spreadsheet, for later export
var parents = DriveApp.getFileById(ss.getId()).getParents();
if (parents.hasNext()) {
var folder = parents.next();
}
else {
folder = DriveApp.getRootFolder();
}
//Get array of all sheets in spreadsheet
var sheets = ss.getSheets();
//Loop through all sheets, generating PDF files.
for (var i=0; i<sheets.length; i++) {
var sheet = sheets[i];
//If provided a optSheetId, only save it.
if (optSheetId && optSheetId !== sheet.getSheetId()) continue; 
//additional parameters for exporting the sheet as a pdf
var url_ext = 'export?exportFormat=pdf&format=pdf'   //export as pdf
+ '&gid=' + sheet.getSheetId()   //the sheet's Id
//following parameters are optional...
+ '&size=A4'      //paper size
+ '&portrait=false'    //orientation, false for landscape
+ '&fitw=true'        //fit to width, false for actual size
+ '&sheetnames=false&printtitle=false&pagenumbers=false'  //hide optional headers and footers
+ '&gridlines=false'  //hide gridlines
+ '&fzr=false'      //do not repeat row headers (frozen rows) on each page
+ '&gid=1672240374'
+ '&ir=false'  //seems to be always false
+ '&ic=false'   //same as ic
+ '&r1=1'     //Start Row number - 1, so row 1 would be 0 , row 15 wold be 14
+ '&c1=0'       //Start Column number - 1, so column 1 would be 0, column 8 would be 7   
+ '&r2=78'      //End Row number
+ '&c2=29';       //End Column number;
var options = {
headers: {
'Authorization': 'Bearer ' +  ScriptApp.getOAuthToken()
}
}
var response = UrlFetchApp.fetch(url + url_ext, options);
var blob = response.getBlob().setName(ss.getName() + ' - ' + ss.getSheetByName("Timesheet").getRange("B5").getValue() + "_" + ss.getSheetByName("Timesheet").getRange("X5").getValue() + '.pdf');
//from here you should be able to use and manipulate the blob to send and email or create a file per usual.
//In this example, I save the pdf to drive
folder.createFile(blob);
}
}```

1 个答案:

答案 0 :(得分:0)

现在可以使用了

/**
* Export one or all sheets in a spreadsheet as PDF files on user's Google Drive,
* in same folder that contained original spreadsheet.
*
* Adapted from https://code.google.com/p/google-apps-script-issues/issues/detail?id=3579#c25
*
* @param {String}  optSSId       (optional) ID of spreadsheet to export.
*                                If not provided, script assumes it is
*                                sheet-bound and opens the active spreadsheet.
* @param {String}  optSheetId    (optional) ID of single sheet to export.
*                                If not provided, all sheets will export.
*/
function savePDFs( optSSId, optSheetId ) {
//If a sheet ID was provided, open that sheet, otherwise assume script is
//sheet-bound, and open the active spreadsheet.
var ss = (optSSId) ? SpreadsheetApp.openById(optSSId) : SpreadsheetApp.getActiveSpreadsheet();
//Get URL of spreadsheet, and remove the trailing 'edit'
var url = ss.getUrl().replace(/edit$/,'');
//Get folder containing spreadsheet, for later export
var parents = DriveApp.getFileById(ss.getId()).getParents();
if (parents.hasNext()) {
var folder = parents.next();
}
else {
folder = DriveApp.getRootFolder();
}
//Get array of all sheets in spreadsheet
// var sheets = ss.getSheets();
//Loop through all sheets, generating PDF files.
//for (var i=0; i<sheets.length; i++) {
//var sheet = sheets[i];
//If provided a optSheetId, only save it.
//if (optSheetId && optSheetId !== sheet.getSheetId()) continue; 
//additional parameters for exporting the sheet as a pdf
var url_ext = 'export?exportFormat=pdf&format=pdf'   //export as pdf
//+ '&gid=' + sheet.getSheetId()   //the sheet's Id
//following parameters are optional...
+ '&size=A4'      //paper size
+ '&portrait=false'    //orientation, false for landscape
+ '&fitw=true'        //fit to width, false for actual size
+ '&sheetnames=false&printtitle=false&pagenumbers=false'  //hide optional headers and footers
+ '&gridlines=false'  //hide gridlines
+ '&fzr=false'      //do not repeat row headers (frozen rows) on each page
+ '&gid=1672240374'
+ '&ir=false'  //seems to be always false
+ '&ic=false'   //same as ic
+ '&r1=1'     //Start Row number - 1, so row 1 would be 0 , row 15 wold be 14
+ '&c1=0'       //Start Column number - 1, so column 1 would be 0, column 8 would be 7   
+ '&r2=78'      //End Row number
+ '&c2=29';       //End Column number;
var options = {
headers: {
'Authorization': 'Bearer ' +  ScriptApp.getOAuthToken()
}
}
var response = UrlFetchApp.fetch(url + url_ext, options);
var blob = response.getBlob().setName(ss.getName() + '_' + ss.getSheetByName("Timesheet").getRange("B5").getValue() + "_" + ss.getSheetByName("Timesheet").getRange("X5").getValue() + "_" + ss.getSheetByName("ECA-Points & Personal Nr.").getRange("K23").getValue() + "." + ss.getSheetByName("ECA-Points & Personal Nr.").getRange("K21").getValue() + '.pdf');
//from here you should be able to use and manipulate the blob to send and email or create a file per usual.
//In this example, I save the pdf to drive
folder.createFile(blob);
}
相关问题