LANG SELRCT

コードを書く場所についてはこちら

2018年2月7日水曜日

スプレッドシートからJSONファイルを作ってGoogleドライブに保存する(keyは1行目)


スプレッドシートからJSONファイルを作ってGoogleドライブに保存する(keyはA列)
ではA列をkeyにしましたが
今回は1行目をkeyにしてJSONを作ってみます


このようなシートから


このようなJSONを作成する

そしてGoogleドライブに保存するというのが以下のコードです



コード.gs
var FILE_NAME = "ファイル名";
var FOLDER_ID = "フォルダのID";

function create_json(){
  var values = get_values();
  var keys = values.shift();
  var array = get_array(values, keys);
  var json = get_json(array);
  create_file(json);
}

function get_values() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var last_row = sheet.getLastRow();
  var last_col = sheet.getLastColumn();
  var start_row = 1;
  var start_col = 1;
  var numRows = last_row - start_row + 1; 
  var numColumns = last_col - start_col + 1;
  var range = sheet.getRange(start_row, start_col, numRows, numColumns);
  var values = range.getValues();
  return values;
}

function get_array(values, keys){
  var array = [];
  for (var i = 0; i < values.length; i++) {
    var obj = create_obj(values[i], keys);
    array.push(obj)
  }
  return array;
}

function create_obj(values, keys) {
  var obj = {}
  for (var j = 0; j < keys.length; j++) {
    obj[keys[j]] = values[j];
  }
  return obj;
}

function get_json(array){
  var json = JSON.stringify(array);
  return json;
}

function create_file(json) {
  var content_type = "application/json";
  var file_name = FILE_NAME;
  var blob = Utilities.newBlob("", content_type, file_name);
  var file = blob.setDataFromString(json, "utf-8");
  var drive = DriveApp.getFolderById(FOLDER_ID);
  drive.createFile(file);
}
意訳
ファイル名を決める
フォルダIDを指定する

この機能がやること
get_values()でアクティブシートの値を取得して
1行目をオブジェクトのキーとして抜き出して
get_array()に残りの値(2行目以降)とkeysを渡して
返ってきたarrayをJSONにして
create_file()に渡してファイルを作成する


この機能がやること
対象のシートを取得して
データの入っている最終行を取得して
データの入っている最終列を取得して
対象範囲の先頭の行を指定して
対象範囲の先頭の列を指定して
対象の行数を取得して(最終行 - 先頭行だと先頭行の分が含まれないので+1する)
対象の列数を取得して(最終列 - 先頭列だと先頭列の分が含まれないので+1する)
範囲を指定して
値を取得して
返す


この機能がやること
結果を入れる配列を用意して
渡されたvaluesの数だけ以下を繰り返す
valuesの値を一つずつcreate_objにkeysと一緒に渡して
返ってきたobjをarrayに追加する

繰り返し処理でobjが追加されたarrayを返す


この機能がやること
空のオブジェクトを用意して
渡されたkeysの数だけ以下を繰り返す
keysの値とvaluesの値でオブジェクトを作る

出来上がったオブジェクトを返す


この機能がやること
渡されたarrayをJSONに変換して
返す


この機能がやること
ファイルの種類をapplication/jsonにして
ファイル名を指定して
Blobを作成して
渡されたjsonと文字コードを渡して
指定したフォルダに
ファイルを作成する



関連記事

スプレッドシートからJSONファイルを作ってGoogleドライブに保存する(keyはA列)
配列の中にオブジェクトを作りたい