如何将生成的PDF文件保存到指定文件夹而非默认云端硬盘目录?
如何将生成的PDF保存到指定文件夹而非默认云端硬盘目录?
我需要将生成的文件保存到指定文件夹,而非默认的云端硬盘目录,请问是否有实现方法?以下是我的代码:
原代码
function onOpen() { SpreadsheetApp.getUi().createMenu('CreatePDF').addItem('CreatePDF', 'CreatePDF').addToUi() } function CreatePDF(){ let copyFile = DriveApp.getFileById('1NKX72gRqZ5XFOS8PbNQFN1cqgWNFsA4wt2NlR3qR2XU').makeCopy(), copyId = copyFile.getId(), copyDoc = DocumentApp.openById(copyId), copyBody = copyDoc.getBody() let activeSheet = SpreadsheetApp.getActiveSheet(), numberOfColumns = activeSheet.getLastColumn(), activeRowIndex = activeSheet.getActiveRange().getRowIndex(), activeRow = activeSheet.getRange(activeRowIndex, 1, 1, numberOfColumns).getDisplayValues(), headerRow = activeSheet.getRange(2, 1, 1, numberOfColumns).getValues(), columnIndex = 0 for (; columnIndex < headerRow[0].length; columnIndex++){ copyBody.replaceText('{' + headerRow[0][columnIndex] + '}', activeRow[0][columnIndex]) } copyDoc.saveAndClose() let newFile = DriveApp.createFile(copyDoc.getAs('application/pdf')) newFile.setName('PAC -' + activeRow[0][0] + '_' + activeRow[0][4]) copyFile.setTrashed SpreadsheetApp.getUi().alert('PAC Completed') }
解决方案
要将PDF保存到指定文件夹,有两种实用方法:
方法1:直接在指定文件夹创建PDF
先通过文件夹ID获取目标文件夹,调用文件夹的createFile()方法生成PDF,替代默认的根目录创建逻辑:
function CreatePDF(){ // 替换为你的目标文件夹ID const targetFolderId = "你的目标文件夹ID"; const targetFolder = DriveApp.getFolderById(targetFolderId); let copyFile = DriveApp.getFileById('1NKX72gRqZ5XFOS8PbNQFN1cqgWNFsA4wt2NlR3qR2XU').makeCopy(), copyId = copyFile.getId(), copyDoc = DocumentApp.openById(copyId), copyBody = copyDoc.getBody() let activeSheet = SpreadsheetApp.getActiveSheet(), numberOfColumns = activeSheet.getLastColumn(), activeRowIndex = activeSheet.getActiveRange().getRowIndex(), activeRow = activeSheet.getRange(activeRowIndex, 1, 1, numberOfColumns).getDisplayValues(), headerRow = activeSheet.getRange(2, 1, 1, numberOfColumns).getValues(), columnIndex = 0 for (; columnIndex < headerRow[0].length; columnIndex++){ copyBody.replaceText('{' + headerRow[0][columnIndex] + '}', activeRow[0][columnIndex]) } copyDoc.saveAndClose() // 直接在目标文件夹生成PDF let newFile = targetFolder.createFile(copyDoc.getAs('application/pdf')) newFile.setName('PAC -' + activeRow[0][0] + '_' + activeRow[0][4]) copyFile.setTrashed(true) // 补上括号,否则无法执行删除操作 SpreadsheetApp.getUi().alert('PAC Completed') }
方法2:生成后移动到指定文件夹
如果需要先在根目录生成文件,再转移到目标文件夹,可使用moveTo()方法:
function CreatePDF(){ // 替换为你的目标文件夹ID const targetFolderId = "你的目标文件夹ID"; const targetFolder = DriveApp.getFolderById(targetFolderId); let copyFile = DriveApp.getFileById('1NKX72gRqZ5XFOS8PbNQFN1cqgWNFsA4wt2NlR3qR2XU').makeCopy(), copyId = copyFile.getId(), copyDoc = DocumentApp.openById(copyId), copyBody = copyDoc.getBody() let activeSheet = SpreadsheetApp.getActiveSheet(), numberOfColumns = activeSheet.getLastColumn(), activeRowIndex = activeSheet.getActiveRange().getRowIndex(), activeRow = activeSheet.getRange(activeRowIndex, 1, 1, numberOfColumns).getDisplayValues(), headerRow = activeSheet.getRange(2, 1, 1, numberOfColumns).getValues(), columnIndex = 0 for (; columnIndex < headerRow[0].length; columnIndex++){ copyBody.replaceText('{' + headerRow[0][columnIndex] + '}', activeRow[0][columnIndex]) } copyDoc.saveAndClose() let newFile = DriveApp.createFile(copyDoc.getAs('application/pdf')) newFile.setName('PAC -' + activeRow[0][0] + '_' + activeRow[0][4]) // 将PDF移动到目标文件夹 newFile.moveTo(targetFolder) copyFile.setTrashed(true) SpreadsheetApp.getUi().alert('PAC Completed') }
注意事项
- 文件夹ID可从文件夹URL末尾的字符串获取
- 原代码中
copyFile.setTrashed缺少括号,需改为copyFile.setTrashed(true)才能正确删除副本文件
内容的提问来源于stack exchange,提问作者Jared Mullikin
相关产品推荐
相关产品推荐

