使用脚本导出 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 使用参数查看和查找您需要的内容。
参考文献:
我有一个 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 使用参数查看和查找您需要的内容。