基本は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;
}