如果已存在同名文件(Google App Script + Google Sheets),请勿保存 PDF



今天,定义如何将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
    }
    

如果我误解了你的问题,这不是你想要的方向,我很抱歉。

相关内容

  • 没有找到相关文章

最新更新