按名称覆盖文件夹中的现有文件(第2部分)

时间:2019-09-28 20:17:44

标签: google-apps-script

以这种方式测试脚本时,SQUADS文件夹中没有我要保存的名称的文件,它实际上保存在SQUADS文件夹中。

但是,当有一个我想要的文件名时,它将新的PDF保存在Google Drive的主文件夹中,正确的做法是删除SQUADS文件夹中的现有PDF并将其保存在{ {1}}文件夹

缺少什么,我仍然不知道该怎么解决

SQUADS

在资源→Google高级服务→Drive API V2中似乎已获得必要的授权

1 个答案:

答案 0 :(得分:2)

问题

删除重复文件并在目标文件夹中创建一个新文件。

解决方案

要扩展第1部分和注释,可以在目标文件夹上使用createFile()方法,以确保新文件直接在其中创建,而不是在驱动器的根目录中创建。对脚本进行的最终修改应如下所示:

此示例假设您在激活高级服务DriveAPI时将其命名。还要注意,folder声明已移至函数作用域以使其正常工作(如果要在变量作用域中使用它们,请不要在较小的作用域中声明变量(在您的情况下,在if...else语句中声明)。较宽的一个):

//...get token and Blob (do not create the file);

var fileName = spreadsheet.getSheetByName("Gerais").getRange("H2").getValue();

//Access or create the 'Squads' folder;
var folder; //declare folder;
var folders = DriveApp.getFoldersByName("Squads"); //returns iterator;
if(folders.hasNext()) {
  folder = folders.next();
}else {
  folder = DriveApp.createFolder("Squads");
}

//Remove duplicate file with the same name;
var existing = folder.getFilesByName(fileName); //returns iterator;
if(existing.hasNext()) {
  var duplicate = existing.next();

  //use either Drive API or Advanced service solution here;
}

//add file;
folder.createFile(pdfBlob).setName(fileName);

高级驱动器服务解决方案

DriveAPI.Files.remove(duplicate.getId());

Drive API解决方案

var durl = 'https://www.googleapis.com/drive/v3/files/'+duplicate.getId();
var dres = UrlFetchApp.fetch(durl,{
  method: 'delete',
  muteHttpExceptions: true,
  headers: {'Authorization': 'Bearer '+token}
});
if(dres.getResponseCode()>=400) {
  //handle errors;
}

参考

  1. createFile(),来自Blob reference [Folder类];
  2. Drive高级服务reference
  3. Files资源reference [Drive public API];
  4. Part 1(请参阅参数处理);