GoogleSheetのプルダウン選択肢を特定のフォルダ内のファイル一覧から自動更新する【GoogleAppsScript】

はじめに

とあるプロジェクト(インディーズゲーム)で、Unity向けのADV開発基盤を作成しています。
ここでは Googel Sheetを使ったシナリオデータの管理を行っていますが、セリフに紐づく素材データをより簡単に管理・設定しやすいようにしたいと思い機能を拡張しました。

デモ

デモ画像では以下を行っています。 * セリフに紐づくキャラ画像の選択をキャラ画像フォルダ内のファイル一覧と同じものをプルダウンから選べる * Google SheetのMenuから手動で更新する

またこちらの更新は トリガーにて一定時間ごとに更新を行っているため、ファイルを更新するたびに手動で更新する必要はありません。

環境

  • Google Sheet(2023/1/9時点での機能を使用)
  • Google Apps Script(2023/1/9時点での機能を使用)

実装方法

特定のフォルダからプルダウンを更新

まずは特定のフォルダからファイル一覧を取得します。

function GetAllFiles(folderId){
  let folder = DriveApp.getFolderById(folderId);
  let files = folder.getFiles();

  let fileNames = []
  while(files.hasNext()){
    var file = files.next();
    fileNames.push([file.getName()])
  }
  console.log(fileNames)
  return fileNames;
}

次にファイル一覧から プルダウンの入力規則を作成・更新します。

function UpdatePulldownValues(sheet,folderId,range){
  let fileName = GetAllFiles(folderId);
  
  //入力規則を作成
  const rule = SpreadsheetApp.newDataValidation().requireValueInList(fileName).build();
  
  //リストをセットするセル範囲を取得
  const cell = sheet.getRange(range);
  
  //セルに入力規則をセット
  cell.setDataValidation(rule);

}

こちらのプロジェクトでは3つの素材を指定したいので、以下のようにまとめる関数を作成しました。

function UpdateAllPulldownValues(){
    const sheet = SpreadsheetApp.getActiveSpreadsheet();
    UpdatePulldownValues(sheet,characterImageFolder,'D2:D100')
    UpdatePulldownValues(sheet,backgroundImageFolder,'E2:E100')
    UpdatePulldownValues(sheet,soundFolder,'F2:F100')
    
}

Custom Menuを作成

以下のような Googel Sheet上のCustom Menuの追加は Google Sheetが開いたときに関数を読み込んでUIの追加ができる onOpen を使用しました。

function onOpen() {
  const customMenu = SpreadsheetApp.getUi()
  customMenu.createMenu('ADV Menu') //メニューバーに表示するカスタムメニュー名
      .addItem('プルダウンの更新', 'UpdateAllPulldownValues') //メニューアイテムを追加
      .addToUi()
}

参考サイト