こんにちは。1カ月とまた間が空きました。
前回のように画像だとわかりづらいかもしれない、と思ったので、Excel形式でダウンロードできるようにしてみました。
シートの方はざっくり2箇所変更済み。
・「data_2」に3行追加。ID、year、month。今回は「ID」を使っていきます。
・「col」シートの中身を全面入れ替え。前回のは「data_2」を作るための列リストで、今回は新規シートで記録していくための列リストです。
(入れ替えるのすっかり忘れてました。。。)
今回の機能追加はこちら。
・作ったシートのIDを取得し、「data_2」のID列に記入するようにする。
→作ったシートに対するコントロールを容易にするため。
・スクリプトをトリガーを使って回すだけで全地方のシートを作れるようにしてみた。
コード
var folderID="********************************";//ファイルを作りたいフォルダ(google drive) function createSS(){ var bookurl_masterbook = https://docs.google.com/spreadsheets/d/”**********************************指定のマスタがあるファイル var masterbook = SpreadsheetApp.openByUrl(bookurl_masterbook); var sheet_master = masterbook.getSheetByName("data_2");//前回を継承してdata_2にしましたが、他の名前にした場合は変えてください var sheet_col = masterbook.getSheetByName("col"); //ある列の最終行取得[D] http://www.relief.jp/docs/google-spreadsheet-gas-get-last-row-number-specified-column.html var last_row = sheet_master.getLastRow(); var id_Arr = sheet_master.getRange(1,25,last_row,1).getValues(); //元のURL[D]にはないが、高速化を狙い一旦配列に入れてみる。 for(var i = last_row-1; i >= 0; i--){ if(id_Arr[i][0].toString() != ''){ var tgrow = i+2; break; } } if(tgrow > last_row){ return; } var textArr = sheet_master.getRange(tgrow,1,1,5).getValues(); var mCol = sheet_col.getRange(1,1,1,26).getValues(); var title=textArr[0][0]+"-"+textArr[0][3]+textArr[0][2]+"("+textArr[0][1]+":"+textArr[0][4]+")"; Logger.log(title); //新しくスプレッドシートを作成する:https://qiita.com/tanaike/items/8c82392ef2749892061c var ss = Drive.Files.insert({ "title": title, "mimeType": "application/vnd.google-apps.spreadsheet", "parents": [{"id": folderID}] }); var book_new = SpreadsheetApp.openById(ss.id); //シート名をすべて取得 https://www.wmapst.net/google/gss/20161207-google-spreadsheet-sheet-name-get/ var names_booknew = wmap_getSheetsName2(book_new); //シート名を変更 http://nevernoteit1419.blogspot.jp/2012/01/blog-post_2201.html var sheet_data=book_new.getSheetByName(names_booknew[0]); sheet_data.setName("data"); sheet_data.getRange(1,1,1,26).setValues(mCol); Logger.log(names_booknew); SpreadsheetApp.setActiveSpreadsheet(book_new); sheet_master.getRange(tgrow,25,1,1).setValue(ss.id); }
実行すると、1エリア分できます。1000以上のエリアがあるので大変ですが、トリガーを使うことでGASは頑張って実行していってくれます。
最後に、このシートのスクリプトから、作ったエリアシートに天気データを記入していくコードができれば完成ですね。
function getweatherdata(area,type,year,month) みたいに、引数入れたらデータが返ってくるように作ると使い勝手がよさそうです。
コメント