You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将生成的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 06:48:25