台電每日備轉容量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++; }}