みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
Google Apps Scriptでスプレッドシートを指定のフォルダに作成する方法をシリーズでお伝えしています。
前回の記事はこちら。
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()); }
この時点では
- createメソッドでスプレッドシートを作成
- 作成したスプレッドシートのIDを取得
- スプレッドシートのIDを使って、そのFileオブジェクトを取得
- 移動先となるFolderオブジェクトを取得
という処理をしていますが、この後の手順として
- 移動先となるFolderオブジェクトにFileオブジェクトを追加
- ルートフォルダからFileオブジェクトを削除
を加えることで、Googleドライブ内の任意のフォルダに作成したスプレッドシートを移動することができるというわけです。
では、その部分を解説していきましょう。
addFileメソッドでGoogleドライブのフォルダにファイルを追加する
まず、Googleドライブの指定のフォルダにファイルを追加するには、addFileメソッドを使います。
書き方はこうです。
先ほどのスクリプトに処理を追加して、以下のようにします。
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」が追加されます。
ルートフォルダに作成したスプレッドシートが残ってしまう
これで「指定のフォルダにスプレッドシートを作成する」という要件は達成したことになるのですが、一点「やり残したこと」があります。
というのも「マイドライブ」をを見てみると…
createメソッドでは必ずマイドライブ(つまりルートフォルダ)にスプレッドシートが作成されます。そして、addFileメソッドでそのファイルを指定のフォルダに追加したのですが、つまりそれはコピーがされたということなんですね。
ルートフォルダにできたファイルを削除しなければなりません。
Googleドライブのルートフォルダからファイルを削除する
removeFileメソッドで指定のフォルダからファイルを削除する
Googleドライブの指定のフォルダからファイルを削除するには、removeFileメソッドを使います。
書き方はこちら。
addFileメソッドと類似していますね。
getRootFolderメソッドでルートフォルダを取得
ルートフォルダにも当然IDがありますので、getFolderByIdメソッドを使ってルートフォルダを取得するという方法も当然あるます。
ですが、ルートフォルダは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メソッドは使い方が類似していますので、合わせてマスター頂ければと思います。
これで結果として、任意のフォルダにスプレッドシートを作成することとなりました。
かなり使用頻度が高いテクニックだと思いますので、どうぞご活用下さいね!
コメント
いつも大変参考にさせていただいております。
今回の記事の下記のスクリプトを実行した結果
【指定された 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’
と波括弧を外していただければよいかも知れません。
ご確認いただければ幸いです。