文件存在的 Google Script 测试

Ste*_*rry 2 google-sheets google-apps-script

我不敢相信没有一种简单的方法可以做到这一点,但我到处寻找可行的解决方案,但没有成功。

我正在 Google Sheet 中运行 Google 脚本,并且我在代码中想要将电子表格另存为新文件名。在我这样做之前,我想检查一下是否已经存在一个(因为我不想覆盖它)。

无论文件夹或文件是否存在,我用来测试的下面的代码都会返回“文件存在”。

与往常一样,非常感谢任何帮助:-)

这是我的测试代码。

function testscriptforfileexistance() {
  filecheck = checkfileexists("UnderDevelopment",'20160919 Weekly Roster v1.0.gsheet');

  if (filecheck.filefound = true)  {
    Browser.msgBox("file found") ;
  } else {
    Browser.msgBox("File not found");
  }
}


function checkfileexists(foldername,fn) {
  var destFolder = DriveApp.getFoldersByName(foldername);
  filefound=false;
  var destFileId = DriveApp.getFilesByName(fn);
//if hasnext returns false, presumably it doesn't exist
  if (!destFileId.hasNext) {
    Logger.log ("Found");
    filefound = true;
// and as a second test, if the length is zero the file doesn't exist
  if (!destFileId[0]) {
    Logger.log ("zero length");
    filefound=false;
  }
  }
  return {filefound:filefound};
}
Run Code Online (Sandbox Code Playgroud)

干杯...史蒂夫

Mr.*_*bot 8

这有点令人困惑,因为hasNext如果您要检查特定文件夹中的文件夹/文件或文件是否存在,则涉及很多。我通过反复试验得到了这个工作。

hasNext()

  • 确定调用是否next()会返回一个项目。

返回

  • Boolean——true如果next()将返回一个项目;false如果不

首先这里有一些相关的问题:

这是一个示例代码:

function checkFile(filename){
  var results;
  var haBDs  = DriveApp.getFilesByName(filename)
  //Does not exist
  if(!haBDs.hasNext()){
  results =  haBDs.hasNext();
  }
  //Does exist
  else{
  results =  haBDs.hasNext();
  }
  Logger.log(results)
  return results;
}

function myFunction() {
  var nomeDB = "FILE_NAME";  
  if(checkFile(nomeDB) == true){
  Logger.log("File Found")
  }else{
  Logger.log("File Not Found")
  }

}
Run Code Online (Sandbox Code Playgroud)

检查您的代码,尝试更改!destFileId.hasNext!destFileId.hasNext()

附加信息,如果您要检查文件是否存在于特定文件夹中,您将使用相同的流程,但您必须检查该文件夹是否也存在(可选)。

这是一个片段:

function checkFile2(filename,foldername){
  
  var folder = DriveApp.getFoldersByName(foldername);
  
  Logger.log(folder.hasNext());

  //Folder does not exist
  if(!folder.hasNext()){
    
  Logger.log("No Folder Found");
  
  }
  //Folder does exist
  else{
    Logger.log("Folder Found")
    var file   = folder.next().getFilesByName(filename);
    if(!file.hasNext()){
       Logger.log("No File Found");
    }
    else{
       Logger.log("File Found");
    }
  }
  
}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!


pkk*_*pkk 5

所以我阅读了所有答案,并认为我可以将@Stoopkid 发布的答案简化为更简洁的函数:

function fileExists_(filename, foldername) {
  var folder = DriveApp.getFoldersByName(foldername);

  if (!folder.hasNext()) {
    return false;
  }

  return folder.next().getFilesByName(filename).hasNext();
}
Run Code Online (Sandbox Code Playgroud)

虽然,我实际使用的版本将特定文件夹作为参数而不是名称:

function fileExists_(filename, folder) {  
  return folder.getFilesByName(filename).hasNext();
}
Run Code Online (Sandbox Code Playgroud)