第10回:GASでアクティブなシートを全て取得する

GAS(Google Apps Script)

第10回はドライブ内のスプレッドシートを全て開いて、その後シートを全てアクティブにしていきます。

前回のコード

前回filesInDriveArray配列にデータを取得したので配列をキーにしてスプレッドシートのデータを全て取得していきます。

function recipeListCreation() {

//↓↓↓↓前回はここから↓↓↓↓↓↓↓↓↓第9回↓↓
  /*--------------------------------------------------------------------------*/
  // Googleドライブの指定フォルダ(らーめん妄想屋レシピフォルダ)内から情報を取得する
  /*--------------------------------------------------------------------------*/
  // GoogleドライブのフォルダId(マイドライブ→レシピ管理→らーめん妄想屋レシピ)
  const folderId = '1uOYBO45AP8FVz3AX2D5XSXZHIiTfJ2nX';

  // Googleドライブ内のフォルダ情報を保持しておく配列
  const filesInDriveArray = [];
  
  // Googleドライブのフォルダ内のすべてのファイル情報を取得
  const files = DriveApp.getFolderById(folderId).getFiles();
  
  // ドライブ内のファイル配列(filesInDriveArray)にデータを入れる
  while(files.hasNext()) {
    var file = files.next();
    filesInDriveArray.push([file.getName(),file.getId(),file.getUrl()]);
  }
  console.log(filesInDriveArray);
//↑↑↑↑第9回↑↑↑↑↑↑↑↑前回はここまで↑↑↑↑

//↓↓↓↓今回はここから書いて行く↓↓↓↓↓↓↓↓↓第10回↓↓
  /*--------------------------------------------------------------------------*/
  // スプレッドシート内の情報を取得する
  /*--------------------------------------------------------------------------*/

//↑↑↑↑第10回↑↑↑↑↑↑↑↑今回はここまで↑↑↑↑
}

ファイル内の全てのスプレッドシートの全てのシートから必要な情報を取得する方法

↑見出しの文章がややこしいですが欲しいデータを一括で全部取得したいという事です。

ドライブ内フォルダのスプレッドシート数を取得する

filesInDriveArray配列の要素数を取得すればドライブ内フォルダに何個スプレッドシートが入っているのかわかるので、filesInDriveArray.lengthで取得する。

[マイドライブフォルダ>レシピ管理フォルダ>らぁめん妄想家フォルダ]に5個のスプレッドシートが入っています。(以下の画像参照)

  //↓↓↓↓今回はここから↓↓↓↓↓↓↓↓↓第10回↓↓
  /*--------------------------------------------------------------------------*/
  // スプレッドシート内の情報を取得する
  /*--------------------------------------------------------------------------*/
  // Googleドライブ内のらーめん妄想屋レシピフォルダ内のスプレッドシート数
  const driveArraryLen = filesInDriveArray.length;

スプレッドシート数があっているかテストしてみる

const driveArraryLen = filesInDriveArray.length;

の直後にconsole.log(driveArraryLen);を追加してみる

  //↓↓↓↓今回はここから↓↓↓↓↓↓↓↓↓第10回↓↓
  /*--------------------------------------------------------------------------*/
  // スプレッドシート内の情報を取得する
  /*--------------------------------------------------------------------------*/
  // Googleドライブ内のらーめん妄想屋レシピフォルダ内のスプレッドシート数
  const driveArraryLen = filesInDriveArray.length;
  console.log("スプレッドシート数:" + driveArraryLen);

”スプレッドシート数:5”と表示されれば正解

これでらぁめん妄想家フォルダに5個のスプレッドシートが入っているという情報が得られました。

filesInDriveArrayに入っているIdをキーにしてスプレッドシートを開く

以下を追加してみる

  /*--------------------------------------------------------------------------*/
  // スプレッドシート内の情報を取得する
  /*--------------------------------------------------------------------------*/
  // Googleドライブ内のらーめん妄想屋レシピフォルダ内のスプレッドシート数
  const driveArraryLen = filesInDriveArray.length;
  console.log("スプレッドシート数:" + driveArraryLen);

  // filesInDriveArrayに入っているIdをキーにしてスプレッドシートを開く
  for (var i=0; i<driveArraryLen; i++) {
    var nowOpenSpreadSheet = SpreadsheetApp.openById(filesInDriveArray[i][1]);
    var nowOpenSheetLen = nowOpenSpreadSheet.getSheets().length;
    console.log("今開いているスプレッドシートの名前:" + nowOpenSpreadSheet.getName());
    console.log("今開いているスプレッドシートのID:" + nowOpenSpreadSheet.getId());
    console.log("今開いているスプレッドシート内のシート数:" + nowOpenSheetLen);
  }
var nowOpenSpreadSheet = SpreadsheetApp.openById(filesInDriveArray[i][1]);

nowOpenSpreadSheetに以下が入っているのでfor分で取得する。

スプレッドシート名=0スプレッドシートId=1スプレッドシートurl=2
[i]=0らぁめん妄想屋レシピ[02おつまみ]XXXXhttps://docs.google.com/spreadsheets/d/XXXX/edit?usp=drivesdk’
[i]=1らぁめん妄想屋レシピ[99半製品]XXXXhttps://docs.google.com/spreadsheets/d/XXXX/edit?usp=drivesdk’
[i]=2らぁめん妄想屋レシピ[20ドリンク]XXXXhttps://docs.google.com/spreadsheets/d/XXXX/edit?usp=drivesdk’
[i]=3らぁめん妄想屋レシピ[03ご飯もの]XXXXhttps://docs.google.com/spreadsheets/d/XXXX/edit?usp=drivesdk’
[i]=4らぁめん妄想屋レシピ[01ラーメン]XXXXhttps://docs.google.com/spreadsheets/d/XXXX/edit?usp=drivesdk’

ドライブ内フォルダのスプレッドシートが全て取得出来ているので次にスプレッドシート内のシートを取得していく

各スプレッドシート内のシートをアクティブにする

開いているスプレッドシートの中にあるシートをアクティブにしてシート内からデータを取得する。

スプレッドシートとシートがややこしいので注意

  /*--------------------------------------------------------------------------*/
  // スプレッドシート内の情報を取得する
  /*--------------------------------------------------------------------------*/
  // Googleドライブ内のらーめん妄想屋レシピフォルダ内のスプレッドシート数
  const driveArraryLen = filesInDriveArray.length;
  console.log("スプレッドシート数:" + driveArraryLen);

  // filesInDriveArrayに入っているIdをキーにしてスプレッドシートを開く
  for (var i=0; i<driveArraryLen; i++) {
    var nowOpenSpreadSheet = SpreadsheetApp.openById(filesInDriveArray[i][1]);
    var nowOpenSheetLen = nowOpenSpreadSheet.getSheets().length;
    console.log("今開いているスプレッドシートの名前:" + nowOpenSpreadSheet.getName());
    console.log("今開いているスプレッドシートのID:" + nowOpenSpreadSheet.getId());
    console.log("今開いているスプレッドシート内のシート数:" + nowOpenSheetLen);

    // スプレッドシートのシートをアクティブにしてレシピ名や売値などを取得する。
    for (var j=0; j<nowOpenSheetLen; j++) {
      // シートをアクティブにする
      var activeSheet = nowOpenSpreadSheet.getSheets()[j];
      console.log("activeSheet名:" + activeSheet.getName());
    }
  }
}

コード全体

function recipeListCreation() {

  /*--------------------------------------------------------------------------*/
  // Googleドライブの指定フォルダ(らーめん妄想屋レシピフォルダ)内から情報を取得する
  /*--------------------------------------------------------------------------*/
  // GoogleドライブのフォルダId(マイドライブ→レシピ管理→らーめん妄想屋レシピ)
  const folderId = '1uOYBO45AP8FVz3AX2D5XSXZHIiTfJ2nX';

  // Googleドライブ内のフォルダ情報を保持しておく配列
  const filesInDriveArray = [];
  
  // Googleドライブのフォルダ内のすべてのファイル情報を取得
  const files = DriveApp.getFolderById(folderId).getFiles();
  
  // ドライブ内のファイル配列(filesInDriveArray)にデータを入れる
  while(files.hasNext()) {
    var file = files.next();
    filesInDriveArray.push([file.getName(),file.getId(),file.getUrl()]);
  }
  //console.log(filesInDriveArray);

  /*--------------------------------------------------------------------------*/
  // スプレッドシート内の情報を取得する
  /*--------------------------------------------------------------------------*/
  // Googleドライブ内のらーめん妄想屋レシピフォルダ内のスプレッドシート数
  const driveArraryLen = filesInDriveArray.length;
  console.log("スプレッドシート数:" + driveArraryLen);

  // filesInDriveArrayに入っているIdをキーにしてスプレッドシートを開く
  for (var i=0; i<driveArraryLen; i++) {
    var nowOpenSpreadSheet = SpreadsheetApp.openById(filesInDriveArray[i][1]);
    var nowOpenSheetLen = nowOpenSpreadSheet.getSheets().length;
    console.log("今開いているスプレッドシートの名前:" + nowOpenSpreadSheet.getName());
    console.log("今開いているスプレッドシートのID:" + nowOpenSpreadSheet.getId());
    console.log("今開いているスプレッドシート内のシート数:" + nowOpenSheetLen);

    // スプレッドシートのシートをアクティブにしてレシピ名や売値などを取得する。
    for (var j=0; j<nowOpenSheetLen; j++) {
      // シートをアクティブにする
      var activeSheet = nowOpenSpreadSheet.getSheets()[j];
      console.log("activeSheet名:" + activeSheet.getName());
    }
  }
}

次回

スプレッドシート内のシート情報を取得出来ました。

次はシート内のセル情報を取得していく。

コメント