特定のCSVを定期的にGoogle Spreadsheetへ自動で更新する方法【GAS】
表題の通り、とあるCSVをGoogle Spreadsheetへ書き出す必要があったですが、手動ではかなり面倒・・・。よって自動で何かできないか調査して、結果できたものを共有します。
コード
function auto_csv(){ var ss = SpreadsheetApp.getActiveSpreadsheet(); var sh = ss.getSheetByName('test'); var url = "https://www.test.com/test.csv"; var blob = UrlFetchApp.fetch(url).getBlob(); // データ取得 var data = blob.getDataAsString(); // 2次元配列に転換 var ary = CSV.parse2(data); //var ary = Utilities.parseCsv(data); // これが使えなかった・・ // シートに反映 sh.getRange(1,1,ary.length,ary[0].length).setValues(ary); } // csv parse // 参考:javascriptでCSVのparser/stringifierを書いてみた - Qiita // https://qiita.com/weal/items/5aa94235c40d60ef2f0c var CSV = {}; CSV.parse2 = function(str) { var i, c, r, q, l, m, v, j, len=str.length, rows = [], row = []; m = (l = str.indexOf('\r\n')<0 ? str.indexOf('\r')<0 ? '\n' : '\r' : '\r\n').length; //改行記号を決定 for(i=0,c=r=-1; i<len; i++) { if (str.charAt(i) === '"') { //quoted for(j=0,q=i+1; q<len; j++,q++) { //閉quotを探す q = (q=str.indexOf('"',q)) < 0 ? len+1 : q; //quotの位置、無いなら末尾まで if (str.charAt(++q) !== '"') {break;} //""なら継続 } row.push((v=str.substring(i+1,(i=q)-1),j) ? v.replace(/""/g,'"') : v); } else { //not quoted if (c<i) {c=str.indexOf(',',i);c=c<0?len:c;} //直近のカンマ位置と if (r<i) {r=str.indexOf(l,i);r=r<0?len:r;} //直近の改行位置を調べ row.push(str.substring(i,(i=c<r?c:r))); //そこまでを値とする } if (i === r || l === (m>1?str.substr(i,m):str.charAt(i))) {rows.push(row);row=[];i+=m-1;} } str.charAt(i-1) === ',' && row.push(''); //,で終わる row.length && rows.push(row); str.substr(i-1,m) === l && rows.push([]); //最後の改行を無視する場合はコメントアウト return rows; };
解説・所感
ネットで調査していると「Utilities.parseCsv」を使ったものがほとんどだったのですが、そうすると項目内にある改行に対応できなかったです。(結構ハマりました・・・) よってなにか無いと思って調べていたところ以下のオリジナルのparserと出会い、試しにやってみるとできました!
javascriptでCSVのparser/stringifierを書いてみた - Qiita
https://qiita.com/weal/items/5aa94235c40d60ef2f0c
感謝