GDD2011 "Google Apps Script"
こんな風に書いた。1時間くらいかな。
敗因は、SpreadsheetApp.create()しなかったこと。
Excel的にスクリプトは、シートに付属するものと思ってた(^^;。
なので、テスト用のループリミッタを付けたり、手でシート消したり(^^;。
スクリプトで消しちゃうと結果の確認できないんだもん。
Browser.msgBox()で消す前に止めればよかったのかな?
あと、最初の「シート1」を削除するのに手間取ったり。
setNumberFormat()の使い方がよくわからずに、これに一番時間がかかったかも...
function myFunction() { var url = 'http://gdd-2011-quiz-japan.appspot.com/apps_script/data?param=5006468581119978011'; var fetch = UrlFetchApp.fetch( url ); //if(response.getResponseCode() != 200) { // throw "error: response code=" + response.getResponseCode(); //} var json = Utilities.jsonParse( fetch.getContentText() ); // data structure: // [{"city_name": "Iadnes", "data": [{"usage": 1050, "capacity": 1616}, ... ]}] // city_name -- Iadnes Ufig Ikasagan Amihsogak Amayot Akoirom Otomamuk Amayako Ihsabeam // Otim Iukuf Otoyk Onagan Ihcok Ikazayim Ufok Ahan Iromoa Akaso Atika // data // usage // capacity // 現在表示中のシートを取得 ss = SpreadsheetApp.getActiveSpreadsheet(); for (var i in json){ // テスト用のリミッタ //if ( i == 2){ // break; //} //Browser.msgBox(json[i].city_name); // city_nameはとれた //Browser.msgBox(json[i].data); // dataはとれた // 都市名 city_name = json[i].city_name; // data数 data_length = json[i].data.length; // 40あるようだ。 // Browser.msgBox(city_name + ": " + data_length); //insertSheet 都市名のシートを作る //挿入するだけだと都市名が登場順に並ばない でも並べるという条件はない ss.insertSheet(city_name, 1); // 作ったシートにデータを書き込む // A1からはじめて、Aにはcapacity、Bにはusage、Cには小数点以下二桁の% datalist = json[i].data; var x = 1; for (var j in datalist){ // 現在のシートを名前で指定しようと思ったけど失敗 //var city_sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(city_name); //SpreadsheetApp.getActiveSpreadsheet().moveActiveSheet(city_sheet); // 今のシートにとりあえず var sheet = ss.getActiveSheet(); var cell= sheet.getRange(x, 1); cell.setValue(datalist[j].capacity); var cell= sheet.getRange(x, 2); cell.setValue(datalist[j].usage); var cell= sheet.getRange(x, 3); persent = Math.round(datalist[j].usage / datalist[j].capacity * 10000) / 100; // %がついてないと怒られた... orz cell.setNumberFormat('#.##%'); cell.setValue(persent); x++; } } // 最初のシートを削除 var sheet = ss.getSheets()[0]; ss.setActiveSheet(sheet); ss.deleteActiveSheet(); }