【GAS】指定フォルダ配下にスプレッドシートを作成する
最終更新から3年以上たっています。ライブラリのバージョンや手順が変わっている可能性があります。
こんにちは。趣味グラマのNobu(@nm_aru)です。
GAS(Google Apps Script)を使って、Googleドライブにフォルダを作成し、その配下にスプレッドシートを作りたかったのですが、色々と苦労したので備忘録として残しておきたいと思います。
フォルダを作成し、配下にスプレッドシートを作成する
コードは以下の通り。
function createSpreadSheetInSpecificFolder(): SpreadSheet {
// 作成するフォルダを格納するフォルダ(ややこしい…)のIDは事前に取得し、CURRENT_FOLDER_IDとして定義しておく
// 【フォルダIDの取得方法】
// Googleドライブの対象フォルダをブラウザで開き、URLの最後のランダム文字列を取得する
// 例) https://drive.google.com/drive/folders/1G99xxx_J9a2QOWgspkDWPjxDdAxxxjyf
// このURLの場合「1G99xxx_J9a2QOWgspkDWPjxDdAxxxjyf」がIDになる
const currentFolder = DriveApp.getFolderById(CURRENT_FOLDER_ID);
// 作成したいフォルダが既に存在している場合は、ゴミ箱に移動する
const folders = currentFolder.getFoldersByName(DATA_FOLDER_NAME);
while (folders.hasNext()) {
let folder = folders.next();
folder.setTrashed(true);
}
// フォルダを作成する
const dataFolder = currentFolder.createFolder(DATA_FOLDER_NAME);
// スプレッドシートを作成する
const file = Drive.Files.insert({
title: name,
mimeType: MimeType.GOOGLE_SHEETS,
parents: [{ id: dataFolder.getId() }],
});
return SpreadsheetApp.openById(file.id);
}最初はSpreadsheetAppクラスのcreate()メソッドを使いましたが、これだとGoogleドライブのルートフォルダ直下に作成されてしまうため、Drive APIを使う事で解決しました。

Class SpreadsheetApp | Apps Script | Google for Developers
Learn how to use Apps Script Class SpreadsheetApp. Access and create Google Sheets files.
ちなみに、他の方法としては、ルートフォルダ直下に作成し、指定フォルダに移動させるという方法もありました。
ただ、何か無理矢理感があったので、この方法は採用していません。
参考までにコードだけ置いておきます。
// ルートフォルダ直下にスプレッドシートを作成
const fileId = SpreadsheetApp.create(spreadsheetName).getId();
// 移動先フォルダの取得
const folder = DriveApp.getFolderById(dataFolder.getId());
// スプレッドシートを移動
DriveApp.getFileById(fileId).moveTo(folder);Drive APIはGCPプロジェクトとの紐付けが必要
GASの開発にはclaspを使っているのですが、pushする度にスプレッドシートのApps Scriptエディタで紐付けたDrive APIが解除されてしまう現象に悩みました。
claspで「clasp apis list」と打ち込むと、GCPプロジェクトを紐付けろと出てくるので、Drive APIを有効化したGCPプロジェクトを作成し、Apps Scriptエディタの設定画面から紐付けたところ、pushしても解除されなくなりました。
まとめ
GAS及びGoogleドライブは、サーバ管理も要らず、使い方次第で色々な事が出来るので、今後も積極的に使っていきたいと思っています。
JavaScript・TypeScript の記事
コメントの受け付けは終了しました。ご意見・ご質問は X(@nm_aru)へどうぞ。


