Google Apps Script无法彻底删除回收站中的PDF及临时文件问题排查
问题原因分析
你的代码里使用setTrashed(true)只是将文件移动到回收站,并非彻底删除。Google Apps Script的原生DriveApp服务没有提供直接彻底删除文件的方法,所以这些文件会一直留在回收站中。
解决方案
要彻底删除文件,需要使用Drive Advanced Service(Google Drive的高级API服务),步骤如下:
1. 启用Drive Advanced Service
在Google Apps Script编辑器中:
- 点击菜单栏的「服务」→「添加服务」
- 找到「Drive API」并添加,版本选择v3
2. 修改代码中的删除逻辑
替换createPDF函数里的setTrashed(true)调用,改用Drive.Files.remove()来彻底删除文件:
function createPDF(info) { var date = Utilities.formatDate(new Date(), "GMT+2", "dd/MM/yyyy | HH:mm"); const pdfFolder = DriveApp.getFolderById("id"); const tempFolder = DriveApp.getFolderById("id"); const templateDoc = DriveApp.getFileById("id"); const newTempFile = templateDoc.makeCopy(tempFolder); const openDoc = DocumentApp.openById(newTempFile.getId()); const body = openDoc.getBody(); body.replaceText("{{nume_familie}}", info['Nume Familie'][0]); body.replaceText("{{adresa_locuinta}}", info['Adresa (acasa)'][0]); openDoc.saveAndClose(); const blobPDF = newTempFile.getAs(MimeType.PDF); const pdfFile = pdfFolder.createFile(blobPDF).setName("Fam. "+info['Nume Familie'][0]+" (plan SU) - " + date); // 彻底删除PDF文件,不进入回收站 Drive.Files.remove(pdfFile.getId()); // 彻底删除临时文档 Drive.Files.remove(newTempFile.getId()); return pdfFile.getId(); }
额外清理方案(可选)
如果回收站里还有遗留的旧文件,可以运行下面的一次性函数批量彻底删除:
function deleteTrashedFiles() { // 遍历回收站中的PDF和Google文档 const pdfFiles = DriveApp.getFilesByType(MimeType.PDF); const docFiles = DriveApp.getFilesByType(MimeType.GOOGLE_DOCS); while (pdfFiles.hasNext()) { const file = pdfFiles.next(); if (file.isTrashed()) { Drive.Files.remove(file.getId()); } } while (docFiles.hasNext()) { const file = docFiles.next(); if (file.isTrashed()) { Drive.Files.remove(file.getId()); } } }
内容的提问来源于stack exchange,提问作者Dornescu Lucian
相关产品推荐
相关产品推荐

