GASでGoogle Driveのファイルを削除する(できないものもある)
きっかけ
Google Drive上のファイルをGASで削除するときにハマったことがあったのでメモ。
通常の削除
削除といえば、setTrashedでございますね。
https://developers.google.com/apps-script/reference/drive/file#settrashedtrashed
ちなみにremoveFileは非推奨でございます。
https://developers.google.com/apps-script/reference/drive/folder#removeFile(File)
function trashFile() { const file = DriveApp.getFileById("fileid") file.setTrashed(true) }
削除の実行後、無事ゴミ箱に移動されているのが確認できました。
ほかの人がアップロードしたファイルの場合
今度はオーナーが自分ではなくて、ほかの人の場合。
権限不足で例外が出てしまいました。
実行結果。
Exception: Access denied: DriveApp. trashFile @ main.gs:3
Webの画面からなら削除できるんですけどね。
不思議。
ファイルのゴミ箱への移動はオーナー権限が必要
Only the owner may trash the File.
ドキュメントにも書いてあるんですが、オーナーのみがファイルをゴミ箱に移動できる。 じゃぁ、オーナーに付け替えようかとこんなコードを書く。
const file = DriveApp.getFileById("fileid") // オーナーの設定 const email = Session.getActiveUser().getEmail() file.setOwner(email) file.setTrashed(true) }
オーナーの付け替えだ。
ただこれも例外が出る。
Exception: Action not allowed trashFile @ main.gs:6
例外が出てるのは、ちょうどsetOwnerしているところ。
ここでGoogle Driveのヘルプを見てみよう。
Make someone else the owner of your file - Computer - Google Drive Help
譲渡できるファイル 個人アカウント(-----@gmail.com)では、次のファイル形式を移行できます。 Google ドキュメント Google スプレッドシート Google スライド Google 図形描画 Google マイマップ フォルダ
というわけで通常のファイルは、Web画面から削除しましょうね。
という話でした。
(マジで困ってるので、GASで削除できる方法あったら教えてほしい)