GoogleドライブのスプレッドシートでJson出力

#はじめに
アプリで使うマスターデーターとかさっとスプレッドで書いてそのままJSONで出力したい。。

#スプレッドの仕様
以下のようなスプレッドを作ります。
![スクリーンショット 2014-07-25 19.53.35.png](https://qiita-image-store.s3.amazonaws.com/0/43688/f211dd54-8d9d-6029-baaf-60b7bc3b13db.png)
このスプレッドで設定したシート名と同じ名前のシートを１つのテーブルとして使います。

##ほげマスター
![スクリーンショット 2014-07-25 19.53.51.png](https://qiita-image-store.s3.amazonaws.com/0/43688/08c05e99-a3c2-ca4b-f4e8-3bcacf9f458e.png)
##もげマスター
![スクリーンショット 2014-07-25 19.54.06.png](https://qiita-image-store.s3.amazonaws.com/0/43688/52b4b693-3c3c-1f00-6028-e11d999cfce3.png)

これをドライブのルートにフォルダ掘って出力するスクリプトです。
![スクリーンショット 2014-07-25 19.52.57.png](https://qiita-image-store.s3.amazonaws.com/0/43688/79f54138-b63c-16d2-c09f-b1a797a4f99d.png)


#ソース
```js
var SHEET_NAME = 'エンティティ一覧';

function exportHelloMaster() {
  var sheetName = SHEET_NAME;
  
  var book = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = book.getSheetByName(sheetName);
  exportJson(sheet);
    
}

function exportJson(sheet){
  // first line(title)
  var colStartIndex = 2;
  var rowNum = 1;
  var firstRange = sheet.getRange(1, colStartIndex, 1, 4);
  var firstRowValues = firstRange.getValues();
  var titleColumns = firstRowValues[0];
  
  // after the second line(data)
  var lastRow = sheet.getLastRow();
  var rowValues = [];
  for(var rowIndex=2; rowIndex<=lastRow; rowIndex++) {
    var rowNum = 1;
    var range = sheet.getRange(rowIndex, colStartIndex, rowNum, 4);
    var values = range.getValues();
    rowValues.push(values[0]);
  }
  
  // create json
  var jsonArray = [];
  for(var i=0; i<rowValues.length; i++) {
    var line = rowValues[i];
    var json = new Object();
    for(var j=0; j<titleColumns.length; j++) {
      json[titleColumns[j]] = line[j];
    }
    jsonArray.push(json);
  }
  
  var objDate=new Date();
  var Year = objDate.getFullYear();
  var Month = objDate.getMonth()+1;
  var Week = objDate.getDay();
  var Day = objDate.getDate();
  var Hour = objDate.getHours();
  var Minute = objDate.getMinutes();
  var Second = objDate.getSeconds();
  
  var targetFolder = DriveApp.createFolder("HogeMoge_OutputMaster_"+Year+Month+Day+"_"+Hour+Minute+Second);
  
  var book = SpreadsheetApp.getActiveSpreadsheet();

  for(var i=0; i<jsonArray.length; i++){
    if(!jsonArray[i]["論理名/シート名"]){
      continue;
    }
    var masterSheet = book.getSheetByName(jsonArray[i]["論理名/シート名"]);
    var json = convertSheet2JsonText(masterSheet);
    var file = targetFolder.createFile(jsonArray[i]["物理名/jsonファイル名"] + ".json", JSON.stringify(json));
  }
}

function convertSheet2JsonText(sheet) {
  var colStartIndex = 2;
  var titleRowIndex = 3;
  var valuesRowIndex = 4;
  var rowNum = 1;
  var firstRange = sheet.getRange(titleRowIndex, colStartIndex, 1, sheet.getLastColumn());
  var firstRowValues = firstRange.getValues();
  var titleColumns = firstRowValues[0];
  
  var lastRow = sheet.getLastRow();
  var rowValues = [];
  for(var rowIndex=valuesRowIndex; rowIndex<=lastRow; rowIndex++) {
    var rowNum = 1;
    var range = sheet.getRange(rowIndex, colStartIndex, rowNum, sheet.getLastColumn());
    var values = range.getValues();
    rowValues.push(values[0]);
  }
  
  // create json
  var jsonArray = [];
  for(var i=0; i<rowValues.length; i++) {
    var line = rowValues[i];
    var json = new Object();
    for(var j=0; j<titleColumns.length; j++) {
      json[titleColumns[j]] = line[j];
    }
    jsonArray.push(json);
  }
  return jsonArray;
}
```

最初に作ったときに参考にしたブログのURLが失念してしまいました。
VBAで作った時はもう少し苦労したけどjsonは相性いいっすね。
とっても簡単。