こんにちは。趣味グラマのNobu(@nm_aru)です。
GAS(Google Apps Script)を使って、Googleドライブにフォルダを作成し、その配下にスプレッドシートを作りたかったのですが、色々と苦労したので備忘録として残しておきたいと思います。
フォルダを作成し、配下にスプレッドシートを作成する
コードは以下の通り。
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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
ちなみに、他の方法としては、ルートフォルダ直下に作成し、指定フォルダに移動させるという方法もありました。
ただ、何か無理矢理感があったので、この方法は採用していません。
参考までにコードだけ置いておきます。
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ルートフォルダ直下にスプレッドシートを作成 | |
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ドライブは、サーバ管理も要らず、使い方次第で色々な事が出来るので、今後も積極的に使っていきたいと思っています。
コメント