JavaScript・TypeScript

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

最終更新から3年以上たっています。ライブラリのバージョンや手順が変わっている可能性があります。

こんにちは。趣味グラマのNobu(@nm_aru)です。

GAS(Google Apps Script)を使って、Googleドライブにフォルダを作成し、その配下にスプレッドシートを作りたかったのですが、色々と苦労したので備忘録として残しておきたいと思います。

フォルダを作成し、配下にスプレッドシートを作成する

コードは以下の通り。

code.ts
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.

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

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

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

code.ts
// ルートフォルダ直下にスプレッドシートを作成
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ドライブは、サーバ管理も要らず、使い方次第で色々な事が出来るので、今後も積極的に使っていきたいと思っています。

made with Flutter

この記事を書いた人がつくったアプリ

JavaScript・TypeScript の記事

コメントの受け付けは終了しました。ご意見・ご質問は X(@nm_aru)へどうぞ。