web-dev-qa-db-fra.com

Script Google Apps: Comment supprimer un fichier dans Google Drive?

Comment écrire un script Google Apps qui supprime des fichiers?

Cela trouve des fichiers:

var ExistingFiles = DocsList.find(fileName);

Mais DocsList.deleteFile n'existe pas pour supprimer un fichier.

Existe-t-il un moyen de déplacer ces fichiers vers un autre dossier ou vers la corbeille?

L'autre solution de contournement que j'envisagerais est de pouvoir remplacer un fichier existant avec le même nom.

Actuellement, lorsque je souhaite créer un fichier avec un nom déjà utilisé dans MyDrive, il crée un deuxième fichier avec le même nom. Je souhaite conserver 1 fichier (le nouveau est conservé et l'ancien est perdu).

17
user1962847

Le service DocsList est désormais obsolète. Cette réponse utilise le nouveau service DriveApp.

Vous pouvez également utiliser le service Advanced Drive, qui peut être utilisé pour supprimer un fichier sans l'envoyer à la corbeille. Vous souhaiterez peut-être supprimer un fichier sans l'envoyer à la corbeille, afin d'éviter de vider le dossier de la corbeille ultérieurement. Le service de lecteur avancé dispose d'une méthode remove qui supprime un fichier sans l'envoyer dans le dossier Corbeille. Les services avancés ont plusieurs des mêmes capacités que les API, sans avoir besoin de faire une requête HTTPS GET ou POST.

function delteFile(myFileName) {
  var allFiles, idToDLET, myFolder, rtrnFromDLET, thisFile;

  myFolder = DriveApp.getFolderById('Put_The_Folder_ID_Here');

  allFiles = myFolder.getFilesByName(myFileName);

  while (allFiles.hasNext()) {//If there is another element in the iterator
    thisFile = allFiles.next();
    idToDLET = thisFile.getId();
    //Logger.log('idToDLET: ' + idToDLET);

    rtrnFromDLET = Drive.Files.remove(idToDLET);
  };
};

Cela combine le service DriveApp et l'API Drive pour supprimer le fichier sans l'envoyer à la corbeille. La méthode de l'API Drive .remove(id) a besoin de l'ID de fichier. Si l'ID de fichier n'est pas disponible, mais que le nom de fichier l'est, le fichier peut d'abord être recherché par nom, puis obtenir l'ID de fichier.

Pour utiliser DriveAPI, vous devez l'ajouter via le menu Resources, Advanced Google Services. Définissez l'API Drive sur ON . [~ # ~] et [~ # ~] assurez-vous que l'API Drive est activée dans votre Google Developers Console . S'il n'est pas activé dans LES DEUX endroits, il ne sera pas disponible.

18
Alan Wells

Ce code utilise la classe DocsList qui est désormais obsolète.

essaye ça :

function test(){
deleteDocByName('Name-of-the-file-to-delete')
}

function deleteDocByName(fileName){
  var docs=DocsList.find(fileName)
    for(n=0;n<docs.length;++n){
     if(docs[n].getName() == fileName){
      var ID = docs[n].getId()
      DocsList.getFileById(ID).setTrashed(true)
      }
     }
    }

comme vous pouvez avoir de nombreux documents avec le même nom, j'ai utilisé une boucle for pour obtenir tous les documents du tableau de documents et les supprimer un par un si nécessaire.

J'ai utilisé une fonction avec le nom de fichier comme paramètre pour simplifier son utilisation dans un script, utilisez la fonction de test pour l'essayer.

Remarque: sachez que tous les fichiers portant ce nom seront mis dans la corbeille (et récupérables ;-)

À propos de la dernière partie de votre question sur la conservation de la plus récente et la suppression de l'ancienne, ce serait faisable (en lisant la date et l'heure du dernier accès) mais je pense que c'est une meilleure idée de supprimer le ancien fichier avant d'en créer un nouveau avec le même nom ... beaucoup plus logique et sûr!

8
Serge insas

Vous pouvez maintenant utiliser les éléments suivants si le fichier est sous forme de feuille de calcul, de document, etc.:

 DriveApp.getFileById(spreadsheet.getId()).setTrashed(true);

ou si vous avez déjà le fichier au lieu d'une feuille de calcul, d'un document, etc., vous pouvez utiliser:

file.setTrashed(true);
7
Riyafa Abdul Hameed

Bien que le service DocsList soit désormais obsolète, à partir des références du dossier de classe, la méthode settrashed est toujours valide:

https://developers.google.com/apps-script/reference/drive/folder#settrashedtrashed

Donc devrait fonctionner simplement ceci:

ExistingFiles.settrashed(true);
3

Voici une autre façon de le faire sans avoir besoin de l'API Drive. (basé sur la réponse d'Allan).

function deleteFile(fileName, folderName) {
  var  myFolder, allFiles, file;
  myFolder = DriveApp.getFoldersByName(folderName).next();

  allFiles = myFolder.getFilesByName(fileName);

  while (allFiles.hasNext()) {
    file = allFiles.next();
    file.getParents().next().removeFile(file);
  }
}
2
gentilmente