前から懸案だった、googleスプレッドシートに入力済みの表形式データをgoogleカレンダーに自動で読み込ませるスクリプトを作った。
この表は観測記録なので、日付データとそれに紐づく観測場所や内容がある。直接カレンダーに入力してもいいのだけど、スプレッドシート側では観測者や写真の在処などを細かい別項目で整理したいし、全部を公開しても見づらいだけなので、必要な情報だけ連携させたいと思っていたのだ。
これらはgoogle Apps Scriptという「サーバーサイドスクリプト環境」で提供されている。
つまりgoogle driveの中に入ってるスプレッドシートなどgoogle Apps(サーバ内で動くWEBアプリケーション)を動かすためのスクリプトで、MS officeでいうVBAみたいなことができる。javascript互換なんだって。
昔いじったことのあるgoogleAPIなどと同じgoogleデベロッパーズの中にリファレンスが。
カレンダー関連トップ https://developers.google.com/apps-script/advanced/calendar
日本語にしてくれている人http://googlestyle.client.jp/calendar_services/class_calendar.html
参考にしたコードはリファレンスにも載ってるこんなかんじ。
GoogleスプレッドシートからGoogleカレンダーにインポート
ただ、これだとgetDefaultCalendar()でデフォルトのカレンダーにしか連携されず、
どうしたらいいかちょっと悩んで、getCalendarById(‘カレンダーID’)にした。
あと、本当は日付が空白だったら読み飛ばしさせたかったんだけど、javascriptの日付判定でハマって
(javascript自体は日付チェック関数とか持ってないんだった・・・いつもその辺でイラッとしてしまうが、javascriptに慣れてないせいで期待しすぎてる自分が悪いんだろう)
一旦諦めてスプレッドシート側で正しい日付形式を渡すよう編集した。
後になって思いついたのだが、よく考えたらGAS自体がjavascriptのラッパー環境だとすれば独自関数もあるよね?と思って探したら、Utilitiesクラスでできそう。・・・どうも勘が鈍っている。
参考:Google Apps Scriptでプログラミングを学ぶ 第5回
function createEventFromSheet() { var sheet, i, myevent, mystart, myend, mylocation, mydescription, mystartrow, myendrow; var sheet = SpreadsheetApp.getActiveSheet(); //カレンダーIDは◯◯@group.calendar.google.comのような形式 var cals = CalendarApp.getCalendarById('カレンダーID'); //シートの固定セルに読み込み開始・終了行を入力 mystartrow = sheet.getRange(5, 14).getValue(); myendrow = sheet.getRange(5, 15).getValue(); //列番号はワークシートに合わせて固定値で変更 for(var i = mystartrow; i <= myendrow; i++) { myevent = sheet.getRange(i, 8).getValue(); mystart = new Date(sheet.getRange(i, 14).getValue()); myend = new Date(sheet.getRange(i, 15).getValue()); mylocation = sheet.getRange(i, 6).getValue(); mydescription = sheet.getRange(i, 16).getValue(); var event = cals.createEvent(myevent, mystart, myend,{location:mylocation, description:mydescription}); } }
おそらくこれくらいなら、ツイッターのログとgoogleカレンダーの連携で使っているZapierでも実現できるんだけど、こっちですぐ出来そうなのでやってみました。
結果、wixのgoogleカレンダーウィジェット(アプリ)で表示させてるのがこれ。
今のところ今年の5月くらいまでデータ入ってます。(4月あたりを見るとわかりやすい)
→修正
今はこちらで公開しています
追記:アイキャッチ画像に、developerのアイコンを使ってみたんだけど、どうも googleさんは各種アイコンの利用に厳しいようなので(各サービスごとに方針が出ており、出てないものは使わないほうがよさそう)、許可が出てるgoogle driveのアイコンに変えました。ドライブのバッジとブランドの使用
初版公開日時: 2014年8月17日
こちらの記事もおすすめ