今天,定义如何将PDF保存到Google云端硬盘中的共享文件夹的脚本部分如下所示:
var token = ScriptApp.getOAuthToken();
var docurl = UrlFetchApp.fetch(theurl, { headers: { 'Authorization': 'Bearer ' + token } });
var pdfBlob = docurl.getBlob();
//...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();
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;
}
}
//add file;
folder.createFile(pdfBlob).setName(fileName);
当我与他人共享文件夹时,我只能编辑我拥有的文件。
我想在以下问题上获得一些帮助...
1 - 分析是否有一个文件名为我正在尝试保存的文件,如果我拥有该文件,请尝试删除它以保存一个新文件。(脚本中已存在(
2 - 如果文件来自其他人,他将无法在上述步骤中删除它。(脚本中已存在(
3 - 如果无法删除它,他将放弃尝试保存文件,因为这样,文件夹中永远不会有具有相同数据的重复文件。(脚本中尚不存在→我需要(
问题:在当前格式中,它尝试删除现有文件以创建一个新文件,无论是否删除,他都会保存新文件,有时会导致同一文件夹中两个不同人的两个文件。这不可能发生。
如果它无法保存,我需要它不会给出错误消息,因为如果它不保存文件,它下面还有更多行需要继续运行直到脚本结束,因为已经有一个具有相同名称的文件。
我尝试使用 IF 方法,但它会导致错误导致脚本停止,我尝试使用的基础是:
var existing = folder.getFilesByName(fileName); //returns iterator;
if(existing.hasNext()) {
var duplicate = existing.next();
if(dres.getResponseCode()>=400) {
//handle errors;
- 您希望仅在可以删除文件时才创建新文件。
- 即使无法删除文件,您也不想停止脚本。
如果我的理解是正确的,那么这个答案呢?请把这看作是几个答案之一。
修改点:
- 在您的脚本中,我认为需要修改 if 语句
if(existing.hasNext()) {}
。 muteHttpExceptions: true
用于请求。因此,即使状态代码不是 200,脚本也不会停止。- 当您只想在可以删除文件时才创建新文件时,添加
if (status == 200)
怎么样?
修改后的脚本:
修改脚本时,请修改脚本if(existing.hasNext()) {}
语句。
if(existing.hasNext()) {
var duplicate = existing.next();
var durl = 'https://www.googleapis.com/drive/v3/files/'+duplicate.getId();
var dres = UrlFetchApp.fetch(durl,{
method: 'delete',
muteHttpExceptions: true,
headers: {'Authorization': 'Bearer '+token}
});
var status = dres.getResponseCode(); // Added
if (status >=400) { // Modified
//handle errors;
} else if (status == 200) {
folder.createFile(pdfBlob).setName(fileName); // Added
}
} else {
folder.createFile(pdfBlob).setName(fileName); // Added
}
- 在此修改中,请删除问题中脚本最后一行的
folder.createFile(pdfBlob).setName(fileName);
。
注意:
与其他模式一样,首先,如果检查文件的所有者,那么以下修改后的脚本怎么样?
if(existing.hasNext()) { var duplicate = existing.next(); if (duplicate.getOwner().getEmail() == Session.getActiveUser().getEmail()) { // Added var durl = 'https://www.googleapis.com/drive/v3/files/'+duplicate.getId(); var dres = UrlFetchApp.fetch(durl,{ method: 'delete', muteHttpExceptions: true, headers: {'Authorization': 'Bearer '+token} }); var status = dres.getResponseCode(); // Added if (status >=400) { // Modified //handle errors; } else if (status == 200) { folder.createFile(pdfBlob).setName(fileName); // Added } } } else { folder.createFile(pdfBlob).setName(fileName); // Added }
如果我误解了你的问题,这不是你想要的方向,我很抱歉。