第12回:GASで二次元配列をシートに一括出力する

GAS(Google Apps Script)

前回取得したデータを出力する

前回までのコード

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);

  // レシピ一覧に出力する情報を保持しておく配列
  const recipeListDataArray = [];

  // 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());

      // データ取得セルを指定する
      var range1  = activeSheet.getRange("B2");   // レシピ名("B2")
      var range2  = activeSheet.getRange("K2");   // レシピコード("K2")
      var range3  = activeSheet.getRange("J5");   // 売値("J5")
      var range4  = activeSheet.getRange("K5");   // 原価/単位("K5")
      var range5  = activeSheet.getRange("L5");   // 原価率("L5")
      var range6  = activeSheet.getRange("J8");   // 店舗名("J8")
      var range7  = activeSheet.getRange("J11");  // 店舗コード("J11")
      var range8  = activeSheet.getRange("L8");   // ジャンル("L8")
      var range9  = activeSheet.getRange("K11");  // ジャンルコード("K11")
      var range10 = activeSheet.getRange("L11");  // 製品コード("L11")
      var range11 = activeSheet.getRange("J14");  // 上がり量("J14")
      var range12 = activeSheet.getRange("K14");  // 単位("K14")

      // データを取得する
      var value1  = range1.getValue();
      var value2  = range2.getValue();
      var value3  = range3.getValue();
      var value4  = range4.getValue();
      var value5  = range5.getValue();
      var value6  = range6.getValue();
      var value7  = range7.getValue();
      var value8  = range8.getValue();
      var value9  = range9.getValue();
      var value10 = range10.getValue();
      var value11 = range11.getValue();
      var value12 = range12.getValue();
      //console.log("【第11】回レシピ名:" + value1);
      //console.log("【第11】回レシピコード:" + value2);

      // レシピ一覧に出力する情報を保持しておく配列にデータを入れる
      recipeListDataArray.push(
        [value1,value2,value3,value4,value5,value6,
        value7,value8,value9,value10,value11,value12]
        );
    }
  }
  //console.log("【第11】回レシピ一覧に出力する情報:" + recipeListDataArray[0]);
  //console.log("【第11】回レシピ一覧に出力する情報:" + recipeListDataArray[1]);
  //console.log("【第11】回レシピ一覧に出力する情報:" + recipeListDataArray[0][0]);
  //console.log("【第11】回レシピ一覧に出力する情報:" + recipeListDataArray[1][0]);

  // ここに追加

}

配列データを出力する

  /*--------------------------------------------------------------------------*/
  // シート内の情報を出力する
  /*--------------------------------------------------------------------------*/
  // スプレッドシート[レシピデータ]のId
  const recipeListId = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';

  // 出力先シート名
  const destinationSheetName = 'レシピ一覧';

  // 出力先シート(レシピ一覧)をアクティブにする
  var activeSheet = SpreadsheetApp.openById(recipeListId).getSheetByName(destinationSheetName);

  // シートに出力する
  activeSheet.getRange(2,1,recipeListDataArray.length,recipeListDataArray[0].length).setValues(recipeListDataArray);

出力出来ました!

が、レシピコードがの頭のゼロがないです

原価率とかも表示がおかしいです。

セルを全選択して123▼→書式なしテキストをクリック

B列、G列、I列、J列にちゃんと頭の0が表示されました。

C列、D列は¥にして、C列は小数点以下を消す

E列は%表示

あとは見やすくして完成

99半製品も変更

レシピデータスプレッドシート→99半製品シートをちょっと便利に

=IFERROR(FILTER('レシピ一覧'!$A$2:$A$1000, 'レシピ一覧'!$I$2:$I$1000="99", 'レシピ一覧'!$J$2:$J$1000=A2), "")

コメント