概要
本投稿では、Google Apps Script (GAS)を使ってGoogle Drive APIで直接指定したフォルダへスプレッドシートを作成する方法についてご紹介します。
これまでGASを用いてスプレッドシートを作成しようとするとき、基本はSpreadsheetAppクラスを利用していました。この場合、DriveAppのようにフォルダ指定でのファイル作成ができないため、スプレッドシートを指定したフォルダへ作成しようとすると、一度ルートへ作成した後に指定したフォルダへ移動させ、ルートにあるスプレッドシートを消去するという操作を行います。すなわち、下記のようになっています。
-
SpreadsheetAppはスプレッドシートを作成することはできますが、ファイル操作はできません。
-
DriveAppはファイル操作はできますが、スプレッドシートを作成することはできません。
上記のため、SpreadsheetAppとDriveAppの両方を使用した方法を使っていました。DriveAppにはファイル作成時のmimeTypeとして「GOOGLE_SHEETS」というものがあるのですが、”Google MIME の作成に「DriveApp.createFile()」は使用できません。高度な Advanced Drive サービスをご利用ください。” とのエラーが発生してしまいます。ここで止まっていました。
丁度時間ができましたので「高度な Advanced Drive」とともに他に直接作成する方法はないかといろいろ探していましたところ、Drive APIに当たりました。Drive APIは主に外部からGoogle Driveを使用するためのものとして紹介されていました。これを利用して解決に至りました。
手順
GASからDrive APIを利用するためには下記2点の設定が必要です。
-
プロジェクトを開いて、上部の 「リソース」 - 「Googleの拡張サービス」 - 「Drive API」をONにする。
-
Googleデベロッパーコンソールのライブラリにて 「Google Drive API」 を検索して有効にする。
上記はプロジェクト単位で設定する必要があります。
スプレッドシートを指定したフォルダへ作成するためのスクリプトは下記の通りです。
Drive.Files.insert({
"title": ファイル名,
"mimeType": "application/vnd.google-apps.spreadsheet",
"parents": [{"id": フォルダID}]
});
フォルダIDは、ブラウザからフォルダを見たときのURLの https://drive.google.com/drive/folders/「この部分」 です。
上記のmimeTypeを変更することでスプレッドシート以外にもいろいろ作成することができます。サポートされているmimeTypeはこちらで確認することができます。
参考サイト
https://developers.google.com/apps-script/guides/services/advanced#enabling_advanced_services
少し気になった
タイトルに「Google Apps Scriptで指定したフォルダへ直接スプレッドシートを作成する」と書いてしまいましたが、「直接」という表現で問題ないかどうか少し不安です。
追記
スプレッドシートを作成した後のアクセス方法について追記します。
スプレッドシートを作成するとオブジェクトとしてその情報が返されますので、その中からファイルidを取得することができます。
var ss = Drive.Files.insert({
"title": ファイル名,
"mimeType": "application/vnd.google-apps.spreadsheet",
"parents": [{"id": フォルダID}]
});
var sheet = SpreadsheetApp.openById(ss.id);
SpreadsheetApp.setActiveSpreadsheet(sheet);
ファイルidが分かればフォルダ情報は不要になりますので、スプレッドシートへのアクセスはSpreadsheetAppクラスを使って行うことができます。