Google Apps Script如何覆盖已有CSV文件而非创建副本
方案1:先删除同名文件再新建(最简实现,无需额外开启服务)
这个方案完全匹配你提到的实现思路,只需要在原有创建逻辑前添加少量代码即可,不需要开启额外服务:
// 构造目标文件名 const targetFileName = file.getName() + '-' + sheet + '.csv'; const targetFolder = DriveApp.getFolderById(fold); // 遍历删除目标文件夹下所有同名文件(移至回收站) while (targetFolder.getFilesByName(targetFileName).hasNext()) { targetFolder.getFilesByName(targetFileName).next().setTrashed(true); } // 原有新建逻辑不变 targetFolder.createFile(targetFileName, csv);
说明:setTrashed(true)是将文件移入Google Drive回收站,普通场景下该逻辑已经可以完全避免生成重复副本。如果需要直接永久删除文件,需要开启Drive高级服务调用永久删除接口。
方案2:直接覆盖已有文件(无需走回收站,需开启Drive高级服务)
如果你不想经过回收站、直接修改已有文件的内容,可以使用Drive API的Files.update方法实现,需要先在Apps Script编辑器的「高级服务」中开启Drive API,示例代码如下:
const targetFileName = file.getName() + '-' + sheet + '.csv'; const targetFolder = DriveApp.getFolderById(fold); const files = targetFolder.getFilesByName(targetFileName); if (files.hasNext()) { // 存在同名文件,直接覆盖内容 const existFile = files.next(); Drive.Files.update( { title: existFile.getName() }, existFile.getId(), Utilities.newBlob(csv).setContentType('text/csv') ); } else { // 无同名文件,直接新建 targetFolder.createFile(targetFileName, csv); }
内容的提问来源于stack exchange,提问作者laganlee
相关产品推荐
相关产品推荐

