基本はJavascript。
doOutput(e)関数で吐き出すらしい。これをAPIにすると、超便利である。
まず、
var summaryData = sh.getDataRange().getValues();
がミソ。これで一度すべてのシート内容を読む。シートが巨大な時はこれをつかう。早いから。
リターンで返す時は、
return ContentService.createTextOutput(JSON.stringify(json)).setMimeType(ContentService.MimeType.JSON);
などなど。単純に文字列を返してもだめっすよ、怒られます。
function doGet(e){ var json = myFunction(); Logger.log(JSON.stringify(json)); return ContentService.createTextOutput(JSON.stringify(json)).setMimeType(ContentService.MimeType.JSON); } function doPost(e) { var json = myFunction(); Logger.log(JSON.stringify(json)); return ContentService.createTextOutput(JSON.stringify(json)).setMimeType(ContentService.MimeType.JSON); } function myFunction() { var url = 'https://docs.google.com/spreadsheets/xxxxxxxxxxxxxxxxxxxxxxxxxx'; var bk = SpreadsheetApp.openByUrl(url); var sh = bk.getSheetByName("food_drink"); // 最後行を取得 var lastRow = sh.getLastRow() - 1; // 最後列を取得 var lastColumn = sh.getLastColumn(); var list = []; var obj = {}; var objShou = {}; var objChuu = {}; var summaryData = sh.getDataRange().getValues(); Logger.log(lastRow); for (var y = 1; y <= lastRow; y++) { // 名前取得 var obj1 = {}; obj1.name = summaryData[y][4]; obj1.money = summaryData[y][5]; obj1.iconImageUrl = summaryData[y][6]; obj1.photoImageUrl = summaryData[y][7]; obj1.id = summaryData[y][0]; list.push(obj1); // 小カテゴリー、次に変化があればオブジェクトへいれる if (y < lastRow) { var dy1 = summaryData[y][3]; var dy2 = summaryData[y+1][3]; if (dy1 != dy2) { objShou[dy1] = list; list = []; } } else { var dy1 = summaryData[y][3]; objShou[dy1] = list; list = []; } // 中カテゴリー、次に変化があればオブジェクトへいれる if (y < lastRow) { var cy1 = summaryData[y][2]; var cy2 = summaryData[y+1][2]; if (cy1 != cy2) { objChuu[cy1] = objShou; objShou = {}; } } else { var cy1 = summaryData[y][2]; objChuu[cy1] = objShou; objShou = {}; } } return objChuu; }