google-apps-script - 使用脚本将 PDF 导出到驱动器
问题描述
我正在尝试将 PDF 导出到我的驱动器。该脚本当前执行此操作。但是,我只希望导出特定范围的单元格,并且我希望保存文件的名称从工作表中的单元格中提取信息。请帮忙!我有以下脚本:
function getpdf2(){
SpreadsheetApp.flush();
var theurl = 'https://docs.google.com/spreadsheets/d/'
+ '1C-ONDP4pZeUrlMYekvg0i8oNceASL1s4_o8oBpQuzHk'
+ '/export?exportFormat=pdf&format=pdf'
+ '&size=LETTER'
+ '&portrait=false'
+ '&fitw=false'
+ '&top_margin=0.50'
+ '&bottom_margin=0.50'
+ '&left_margin=0.50'
+ '&right_margin=0.50'
+ '&sheetnames=false&printtitle=false'
+ '&pagenum=false'
+ '&gridlines=false'
+ '&fzr=FALSE'
+ '&gid='
+ '1101884643';
var token = ScriptApp.getOAuthToken();
var docurl = UrlFetchApp.fetch(theurl, { headers: { 'Authorization': 'Bearer ' + token } });
var fileid = DriveApp.createFile(docurl.getBlob()).setName('CAITLYN!B7.pdf').getId();
var pdf = docurl.getBlob().setName('CAITLYN!B7.pdf');
var pdf = docurl.getBlob().getAs('application/pdf').setName('testss.pdf');
var filetodel = DriveApp.getFileById(fileid);
if (DriveApp.getFoldersByName("PDF Quotes").hasNext()){
var folder = DriveApp.getFoldersByName("PDF Quotes").next();
filetodel.makeCopy(folder);
}
DriveApp.removeFile(filetodel);
}
解决方案
由于没有导出特定范围的本地方法,我们需要访问电子表格中的数据。
为了简化导出过程,我们需要做的是将数据范围复制到临时工作表中,然后将其粘贴到第一组单元格中。
之后,我们需要将复制的单元格之外的单元格隐藏起来。
最后,我们将该临时工作表导出为驱动器中的 pdf。
这是整个工作代码。
function exportRangeToPdf() {
// Get the sheet id, sheet name, range of cells you want to export
// and the folder ID in your drive where you want to store the pdf
var sheetId = '1ZzkBAR1EgismFCd-hxOUyC_uZKYucu7Av-lDHhrEMx4';
var sheetName = 'Sheet1';
var sheetSrcRange = 'B5:C6';
var driveId = '0B55C21aJsSBlfk9FTjRqOG8tb3hjR1N4MTU1YjVPNU4weGVhSldfU3F4OXladVVNMF9Ccms';
var sheet = SpreadsheetApp.openById(sheetId).getSheetByName(sheetName);
var range = sheet.getRange(sheetSrcRange);
var sheetDstRange = 'A1:' + sheet.getRange(range.getHeight(), range.getWidth()).getA1Notation();
var rangeValues = range.getValues();
var folder = DriveApp.getFolderById(driveId);
// Feel free to modify if needed
// From sheet name (e.g. Sheet1.pdf)
var pdfName = sheetName + '.pdf';
// From specific cell, can be inside or outside your selected range to export (e.g. exportedPDF.pdf)
// var pdfName = sheet.getRange('C7').getValue() + '.pdf';
// From the combination of sheet name and range you chose (e.g. Sheet1_B5:C6.pdf)
// var pdfName = sheetName + '_' + sheetSrcRange + '.pdf';
// Create a blank spreadsheet to be able to export just the range
var destSpreadsheet = SpreadsheetApp.create('PDF');
// If our range is 2 rows and 2 columns we want it to be copied from A1 to B2
// Then we can hide the rest of columns and rows and export
var sheet2 = destSpreadsheet.getSheetByName('temp');
if(!sheet2){
destSpreadsheet.insertSheet('temp').getRange(sheetDstRange).setValues(rangeValues);
var sheet2 = destSpreadsheet.getSheetByName('temp');
}
// Hide all the rows and columns that do not have content
sheet2.hideRows(sheet2.getLastRow() + 1, sheet2.getMaxRows() - sheet2.getLastRow());
sheet2.hideColumns(sheet2.getLastColumn() + 1, sheet2.getMaxColumns() - sheet2.getLastColumn());
// Delete the first sheet that is automatically created when you create a new spreadsheet
destSpreadsheet.deleteSheet(destSpreadsheet.getSheetByName(sheetName));
// Export our new spreadsheet to PDF
var theBlob = destSpreadsheet.getBlob().getAs('application/pdf').setName(pdfName);
folder.createFile(theBlob);
// Delete the spreadsheet we created to export this range.
DriveApp.getFileById(destSpreadsheet.getId()).setTrashed(true);
}
样本数据:
输出:
推荐阅读
- python - 为具有不同 auth_info 但从 API 提取数据并推送到数据库的相同逻辑的多个客户端创建 DAG 的最佳方法是什么?
- javascript - 无法更改 axios heder 内容类型
- regex - 使用 find 和 regex 区分 .h 和 .sh
- mongodb - 在 mongodb 中的分组之上排序
- javascript - 如何在 namecheap VPS 服务器上公开 nodejs api?
- mysql - 给定一个 MySQL datediff,如何输出实际使用的日期范围
- arrays - 保留 SAS 中人员的最近 5 次访问
- react-native - 做了官方的 React Native CLI 快速入门指南。无法启动,卡在加载依赖图
- c# - Azure 搜索查询字符串中的文字 & 符号
- python - 如何在 Azure 中使用 Python SDK 设置 enable_https_traffic_only?