Google Apps ScriptでGoogleドライブ内のファイルを追加・削除・移動をする方法


tidying-up

photo credit: Flооd snow day on kitchen road via photopin (license)

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

Google Apps Scriptでスプレッドシートを指定のフォルダに作成する方法をシリーズでお伝えしています。

前回の記事はこちら。

基本中の基本!GASでGoogleドライブのファイル・フォルダをIDで取得する
Google Apps ScriptでGoogleドライブ内のファイルを目的のフォルダに移動したいということはよくあります。今回はそのための準備としてフォルダやファイルをIDで操作する方法です。

GoogleドライブのフォルダやファイルをIDを使って取得する方法についてお伝えしました。

今回はその続きとして、Google Apps ScriptでGoogleドライブの指定のフォルダにファイルを追加する方法、削除する方法についてお伝えします。

追加と削除ができれば、移動もできます。

では、行ってみましょう!

スポンサーリンク

前回までのおさらい

前回までの連載で、以下のようなスクリプトを作りました。

const FOLDER_ID = '{フォルダID}';

function creatSS() {

  const id = SpreadsheetApp.create("新規SS").getId();
  const file = DriveApp.getFileById(id);
  const folder = DriveApp.getFolderById(FOLDER_ID);

  console.log(folder.getName());

}

この時点では

  1. createメソッドでスプレッドシートを作成
  2. 作成したスプレッドシートのIDを取得
  3. スプレッドシートのIDを使って、そのFileオブジェクトを取得
  4. 移動先となるFolderオブジェクトを取得

という処理をしていますが、この後の手順として

  • 移動先となるFolderオブジェクトにFileオブジェクトを追加
  • ルートフォルダからFileオブジェクトを削除

を加えることで、Googleドライブ内の任意のフォルダに作成したスプレッドシートを移動することができるというわけです。

では、その部分を解説していきましょう。

addFileメソッドでGoogleドライブのフォルダにファイルを追加する

まず、Googleドライブの指定のフォルダにファイルを追加するには、addFileメソッドを使います。

書き方はこうです。

Folderオブジェクト.addFile(Fileオブジェクト)

先ほどのスクリプトに処理を追加して、以下のようにします。

const FOLDER_ID = '{フォルダID}';

function creatSS() {

  const id = SpreadsheetApp.create("新規SS").getId();
  const file = DriveApp.getFileById(id);
  const folder = DriveApp.getFolderById(FOLDER_ID);

  folder.addFile(file);

}

これでFOLDER_IDで指定したフォルダに、作成したスプレッドシートが追加されるわけです。

今回は「スプレッドシート作成・移動」というフォルダのIDを指定していますので、そこにスプレッドシート「新規SS」が追加されます。

GASで指定のフォルダにファイルを追加

ルートフォルダに作成したスプレッドシートが残ってしまう

これで「指定のフォルダにスプレッドシートを作成する」という要件は達成したことになるのですが、一点「やり残したこと」があります。

というのも「マイドライブ」をを見てみると…

マイドライブにもGASで作成したスプレッドシートが残っている
「新規SS」がこちらにもありますね。

createメソッドでは必ずマイドライブ(つまりルートフォルダ)にスプレッドシートが作成されます。そして、addFileメソッドでそのファイルを指定のフォルダに追加したのですが、つまりそれはコピーがされたということなんですね。

ルートフォルダにできたファイルを削除しなければなりません。

Googleドライブのルートフォルダからファイルを削除する

removeFileメソッドで指定のフォルダからファイルを削除する

Googleドライブの指定のフォルダからファイルを削除するには、removeFileメソッドを使います。

書き方はこちら。

Folderオブジェクト.removeFile(Fileオブジェクト)

addFileメソッドと類似していますね。

getRootFolderメソッドでルートフォルダを取得

ルートフォルダにも当然IDがありますので、getFolderByIdメソッドを使ってルートフォルダを取得するという方法も当然あるます。

ですが、ルートフォルダはgetRootFolderメソッドで簡単に取得できます。

このように書きます。

DriveApp.getRootFolder()

これで、現在のアカウントのGoogleドライブのマイドライブつまりルートフォルダを指定できます。

スプレッドシートを指定のフォルダに作成するスクリプト

以上をふまえて、スプレッドシートを指定のフォルダに作成するスクリプトを作りました。

const FOLDER_ID = '{フォルダID}';

function creatSS() {

  var id = SpreadsheetApp.create("新規SS").getId();
  var file = DriveApp.getFileById(id);
  var folder = DriveApp.getFolderById(FOLDER_ID);

  folder.addFile(file);
  DriveApp.getRootFolder().removeFile(file);

}

これで、ルートフォルダに作成されたスプレッドシートが指定のフォルダに移動されます。

つまり、結果として「新規SS」は指定のフォルダに作成されたのと同義になります。

まとめ

以上、Google Apps ScriptでGoogleドライブの指定のフォルダにファイルを追加する方法、削除する方法についてお伝えしました。

addFileメソッドと、removeFileメソッドは使い方が類似していますので、合わせてマスター頂ければと思います。

これで結果として、任意のフォルダにスプレッドシートを作成することとなりました。

かなり使用頻度が高いテクニックだと思いますので、どうぞご活用下さいね!

連載目次:GASでスプレッドシートを指定フォルダに作成する方法

Google Apps Scriptで新規のスプレッドシートを作成したい局面はたくさんありますが、常にルートフォルダにファイルができてしまい、ルートフォルダがぐちゃぐちゃに…てなことも。 このシリーズでは、Googleドライブのファイルやフォルダの操作を学びながら、指定のフォルダにスプレッドシートを作る方法をお伝えします。
  1. 初心者でも簡単!GASでスプレッドシートを作成する方法&取得する方法
  2. 基本中の基本!GASでGoogleドライブのファイル・フォルダをIDで取得する
  3. Google Apps ScriptでGoogleドライブ内のファイルを追加・削除・移動をする方法

コメント

  1. いけどん より:

    いつも大変参考にさせていただいております。
    今回の記事の下記のスクリプトを実行した結果

    【指定された ID のアイテムは見つからなかったか、アクセスする権限がありません。(行 7、ファイル「コード」)表示しない】
    というエラーが返されているのですが、何が原因なのでしょうか。
    フォルダIDはきちんと入れたい対象のフォルダIDを入力いたしました。
    対象のフォルダはある組織の共有フォルダに私が作成したもので編集権限などもきちんとあるのですが、何が問題なのでしょうか。

    var FOLDER_ID = ‘{フォルダID}’;

    function creatSS() {

    var idSS = SpreadsheetApp.create(“新規SS”).getId();
    var fileSS = DriveApp.getFileById(idSS);
    var folderTarget = DriveApp.getFolderById(FOLDER_ID);

    folderTarget.addFile(fileSS);
    DriveApp.getRootFolder().removeFile(fileSS);

    }

    • いどけん様

      コメントありがとうございます!
      もしかしたら、フォルダIDですが

      ‘{XXXXXXXX}’

      と指定されていらっしゃったりされますか?もしそうだとすると

      ‘XXXXXXXX’

      と波括弧を外していただければよいかも知れません。
      ご確認いただければ幸いです。

タイトルとURLをコピーしました