22

ファイルを削除するGoogleAppsScriptを作成するにはどうすればよいですか?

これはファイルを検索します:

var ExistingFiles = DocsList.find(fileName);

ただしDocsList.deleteFile、ファイルを削除するために存在しません。

それらのファイルを別のフォルダまたはゴミ箱に移動する方法はありますか?

私が検討する他の回避策は、同じ名前の既存のファイルをオーバーライドできるようにすることです。

現在、MyDriveですでに使用されている名前のファイルを作成する場合、同じ名前の2番目のファイルが作成されます。1つのファイルを保持したい(新しいファイルは保持され、古いファイルは失われます)。

4

5 に答える 5

26

ファイルの削除に使用できるサービスは 3 つあります。

  • DriveApp - Apps Script に組み込み
  • Advanced Drive Service - Apps Script に組み込まれていますが、有効にする必要があります。DriveApp よりも多くの機能を備えています
  • Google Drive API - Apps Script には組み込まれていませんが、Drive REST API を使用して Apps Script から使用できます。UrlFetchApp.fetch(url,options)

このDocsListサービスは廃止されました。

Advanced Drive Service を使用すると、ファイルをごみ箱に移動せずに削除できます。削除されたファイルを取り戻せないリスクを真剣に検討してください。Advanced Drive Service にはremove、ファイルをゴミ箱に移動せずに削除する方法があります。高度なサービスには、API と同じ機能の多くがあり、HTTPS GET または POST 要求を行う必要がなく、OAuth ライブラリも必要ありません。

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);
  };
};

これは、DriveApp サービスと Drive API を組み合わせて、ごみ箱に移動せずにファイルを削除します。Drive API メソッド.remove(id)にはファイル ID が必要です。ファイル ID は使用できないが、ファイル名は使用できる場合は、最初にファイルを名前で検索してから、ファイル ID を取得できます。

DriveAPI を使用するには、[ Resources ]の[ Advanced Google Services ] メニューから追加する必要があります。ドライブ API をONに設定します。 そして、Google Cloud Platform で Drive API がオンになっていることを確認してください。両方の場所でオンにしないと、使用できません。

于 2014-06-15T05:52:10.073 に答える
15

ファイルがスプレッドシート、ドキュメントなどの場合は、次を使用できます。

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

または、スプレッドシートやドキュメントなどの代わりにファイルが既にある場合は、次を使用できます。

file.setTrashed(true);
于 2016-12-25T05:54:11.873 に答える
9

このコードは、DocsList現在非推奨となっているクラスを使用しています。

これを試して :

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)
      }
     }
    }

同じ名前のドキュメントを多数持つことができるため、forループを使用して、ドキュメントの配列内のすべてのドキュメントを取得し、必要に応じて1つずつ削除しました。

スクリプトでの使用を簡素化するためにファイル名をパラメーターとして持つ関数を使用し、テスト関数を使用して試してみました。

注:この名前のすべてのファイルはゴミ箱に移動されることに注意してください(そして回復可能です;-)

最新のファイルを保持して古いファイルを削除することについての質問の最後の部分については、(最後にアクセスした日時を読み取ることで)実行可能ですが、新しいファイルを作成する前に古いファイルを削除することをお勧めします同じ名前で...はるかに論理的で安全です!

于 2013-01-09T16:13:25.270 に答える
3

サービスの DocsList は非推奨になりましたが、Class Folder の参照から、settrashed メソッドは引き続き有効です。

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

したがって、これは単純に機能するはずです:

ExistingFiles.settrashed(true);
于 2016-05-06T18:22:16.013 に答える
2

Drive API を必要とせずにそれを行う別の方法を次に示します。(アランの回答に基づく)。

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);
  }
}
于 2019-05-08T17:46:11.627 に答える