【GAS】指定フォルダ配下にスプレッドシートを作成する

個人開発

こんにちは。趣味グラマの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);
}
view raw code.ts hosted with ❤ by GitHub

最初はSpreadsheetAppクラスのcreate()メソッドを使いましたが、これだとGoogleドライブのルートフォルダ直下に作成されてしまうため、Drive APIを使う事で解決しました。

Class SpreadsheetApp  |  Apps Script  |  Google for Developers

ちなみに、他の方法としては、ルートフォルダ直下に作成し、指定フォルダに移動させるという方法もありました。

ただ、何か無理矢理感があったので、この方法は採用していません。

参考までにコードだけ置いておきます。

// ルートフォルダ直下にスプレッドシートを作成
const fileId = SpreadsheetApp.create(spreadsheetName).getId();
// 移動先フォルダの取得
const folder = DriveApp.getFolderById(dataFolder.getId());
// スプレッドシートを移動
DriveApp.getFileById(fileId).moveTo(folder);
view raw code.ts hosted with ❤ by GitHub

Drive APIはGCPプロジェクトとの紐付けが必要

GASの開発にはclaspを使っているのですが、pushする度にスプレッドシートのApps Scriptエディタで紐付けたDrive APIが解除されてしまう現象に悩みました。

claspで「clasp apis list」と打ち込むと、GCPプロジェクトを紐付けろと出てくるので、Drive APIを有効化したGCPプロジェクトを作成し、Apps Scriptエディタの設定画面から紐付けたところ、pushしても解除されなくなりました。

まとめ

GAS及びGoogleドライブは、サーバ管理も要らず、使い方次第で色々な事が出来るので、今後も積極的に使っていきたいと思っています。

コメント

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