台電每日備轉容量opendata,將之存到某個google spreadsheet內的sheet,為配合程式碼,請將此sheet從「工作表1」改命名為「data」。
此spreadsheet要設定成知道網址便可編輯;請把分享網址中的id另外抄下來,程式碼裡面要用到。
執行後,新資料會附加到sheet(表單)的最後一列
以下步驟請慢看:
function importTPOWER() {
//spreadsheet檔可編輯網址
//https://docs.google.com/spreadsheets/d/1MxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxQuY/edit?usp=sharing
var sheet = SpreadsheetApp.openById('1MxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxQuY').getSheetByName('data');
//抓出現存資料表最後一列,準備將資料從這列開始填
var lastrow = sheet.getLastRow();
//把opendata下載csv格式的網址抓成一個物件(名為response)
var response = UrlFetchApp.fetch("http://data.taipower.com.tw/opendata/apply/file/d006002/%E6%9C%AC%E5%B9%B4%E5%BA%A6%E6%AF%8F%E6%97%A5%E5%B0%96%E5%B3%B0%E5%82%99%E8%BD%89%E5%AE%B9%E9%87%8F%E7%8E%87.csv");
//把response物件用getContentText()方法濾出文字檔,再用split()方法每列切成一個陣列元素,這些元素組成rows陣列
var rows = response.getContentText().split('\n');
//rows陣列元素長得像下面這樣
//rows[0]="日期,備轉容量(萬瓩),備轉容量率(%)"
//rows[1]="2018/01/01,207.0,8.76"
//rows[2]="2018/01/02,172.0,6.18" ............................直到最後一列最後一個日期
var i=0;
//跑個foreach迴圈,rows陣列有幾個元素就跑幾圈,每圈取出一個元素,在此迴圈內命名為row,實際上的資料長得像是 row="2018/01/01,207.0,8.76"
for each(row in rows){
//row字串變數各欄位以逗號(,)分割,便用split()方法將之切成若干陣列元素,這些陣列元素組成cdatas陣列
var cdatas = row.split(',');
//切割結果如下
//cdatas[0]="2018/1/1"
//cdatas[1]="207.0"
//cdatas[2]="8.76"
j=0;
//跑個foreach迴圈,cdatas陣列有幾個元素就跑幾圈,這些變數存成cdata字串
for each(cdata in cdatas){
//把cdata逐一塞進表單最後一列
sheet.getRange(lastrow +i + 1, 1 + j).setValue(cdata);
j++;
}
i++;
}
}