以这种方式测试脚本时,SQUADS
文件夹中没有我要保存的名称的文件,它实际上保存在SQUADS文件夹中。
但是,当有一个我想要的文件名时,它将新的PDF保存在Google Drive的主文件夹中,正确的做法是删除SQUADS
文件夹中的现有PDF并将其保存在{ {1}}文件夹
缺少什么,我仍然不知道该怎么解决
SQUADS
在资源→Google高级服务→Drive API V2中似乎已获得必要的授权
答案 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;
}
参考