こういうスプレッドシートを
JSONファイルにしてGoogleドライブに保存する
(保存したファイルを開いた画面↓)
コード.gsの
SS_URL:保存したいシートがあるスプレッドシートのURL
FOLDER_ID:保存先のフォルダのID
FILE_NAME:保存したいファイル名
は任意で設定して下さい
コード.gs
function save_to_drive_json() { var data = get_values(); var keys = data[0]; var values = data[1]; var jobj = create_jobj(keys, values); create_file(jobj); } function get_values() { var ss_url = "SS_URL"; var ss = SpreadsheetApp.openByUrl(ss_url); var sheet = ss.getSheets()[0]; var last_row = sheet.getLastRow(); var keys = sheet.getRange("A1:A" + last_row).getValues(); var values = sheet.getRange("B1:B" + last_row).getValues(); var data = [keys, values]; return data; } function create_jobj(keys, values) { var obj = new Object(); for (var i = 0; i < keys.length; i++) { obj[keys[i]] = values[i][0]; } var jobj = JSON.stringify(obj); return jobj; } function create_file(jobj) { var content_type = "application/json"; var file_name = "FILE_NAME"; var blob = Utilities.newBlob("", content_type, file_name); var file = blob.setDataFromString(jobj, "utf-8"); var drive = DriveApp.getFolderById("FOLDER_ID"); drive.createFile(file); } |
意訳この機能がやること get_values()を実行して 返ってきた値の0番目のデータを取得し 返ってきた値の1番目のデータを取得し create_jobjに渡して 返ってきた値をcreate_fileに渡す この機能がやること スプレッドシートのURLを指定して 開いて 先頭のシートを取得して データが入っている最終行を取得して A列のデータを取得し B列のデータを取得し 配列に入れて 返す この機能がやること オブジェクトを作成して 受け取ったkeysの数だけ以下を繰り返す keysとvaluesの値をセットにして一つずつオブジェクトに入れて 最終的にできたオブジェクトをJSONに変換して 返す この機能がやること content_typeを設定する ファイル名を設定する Blob objectを作成して jobjと文字コードを渡し 指定したフォルダに ファイルを作成する |
A列をkeyにしてB列以降を配列に入れるVersion
コード.gsvar FILE_NAME = "ファイル名"; var FOLDER_ID = "フォルダID"; function save_to_drive_json() { var values = get_values(); var jobj = create_jobj(values); create_file(jobj); } 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 create_jobj(values) { var obj = new Object(); for (var i = 0; i < values.length; i++) { var key = values[i].shift(); var value = values[i]; obj[key] = value; } var jobj = JSON.stringify(obj); return jobj; } function create_file(jobj) { var content_type = "application/json"; var file_name = FILE_NAME; var blob = Utilities.newBlob("", content_type, file_name); var file = blob.setDataFromString(jobj, "utf-8"); var drive = DriveApp.getFolderById(FOLDER_ID); drive.createFile(file); } | 意訳ファイル名を決める フォルダ名を決める この機能がやること get_values()を実行して 返ってきたvaluesをcreate_jobjに渡して 返ってきた値をcreate_fileに渡す この機能がやること 対象のシートを取得して データの入っている最終行を取得して データの入っている最終列を取得して 対象範囲の先頭の行を指定して 対象範囲の先頭の列を指定して 対象の行数を取得して(最終行 - 先頭行だと先頭行の分が含まれないので+1する) 対象の列数を取得して(最終列 - 先頭列だと先頭列の分が含まれないので+1する) 範囲を指定して 値を取得して 返す この機能がやること オブジェクトを作成して 受け取ったvaluesの数だけ以下を繰り返す values[i]の先頭の要素を抜き出してkeyにして 残りをvalueにして オブジェクトを作る 最終的にできたオブジェクトをJSONに変換して 返す この機能がやること ファイルの種類をapplication/jsonにして ファイル名を指定して Blobを作成して 渡されたjsonと文字コードを渡して 指定したフォルダに ファイルを作成する |
参考
Class Utilities
https://developers.google.com/apps-script/reference/utilities/utilities