入社一年目の佐藤範幸と申します。
去年も書かせていただきましたが、今年もアドベントカレンダーの記事を書かせていただきます。
よろしくお願いいたします。
Googleスプレッドシート、活用してますか?
近頃はなんでもかんでもGoogleに頼ってしまう風潮、ありません?
僕はこの風潮、大好きです。便利なんですよ。
もっと盛り上がってほしい。
盛り上がることで、Googleが提供するサービスが向上してほしい。
この前Google翻訳が進化して、ニューラルネットを活用した翻訳サービスが始まりましたね。
この調子でどんどん便利になってほしいですね。
さて、僕は少し前に新しいPCを買いましたが、性能に予算をかけてしまったせいでMicrosoft Officeを買うことが出来ませんでした。
そんな僕にぴったりのサービス。それが、Googleスプレッドシートです。
Googleスプレッドシートは表計算アプリケーションで、Microsoft Excelのように使うことが出来ます。
「でもマクロ使えないじゃん」
こう思ったIT技術者の皆さんいませんか?
実は同様の機能があるんです。
Google Apps Script
それがこれ、Google Apps Script。
これを使えば、Excelのように簡単なマクロを組むことが出来ます。
主な言語は java script。なじみのある言語ですね。
サーバーサイドのjava script+Google独自の関数を用いて記述していきます。
ちょこっと実践
うろ覚え知識でクイズアプリを作ってみました。
簡素なものですが簡単に作れます。
ソースコードを全部載せます。勉強&作成途中のため汚いですが容赦ください。
ソースコードを全部載せます。勉強&作成途中のため汚いですが容赦ください。
//初期化 function initialize(){ //シート取得 var sheet_m = SpreadsheetApp.getActive().getSheetByName('main'); var sheet_q = SpreadsheetApp.getActive().getSheetByName('question'); var sheet_s = SpreadsheetApp.getActive().getSheetByName('set'); var sheet_l = SpreadsheetApp.getActive().getSheetByName('log'); //setシート if (sheet_s != null){ SpreadsheetApp.getActiveSpreadsheet().deleteSheet(sheet_s); } SpreadsheetApp.getActive().setActiveSheet(sheet_q); sheet_s = SpreadsheetApp.getActive().duplicateActiveSheet().setName('set'); //値クリア sheet_m.getRange('A1').setValue('第1問'); sheet_m.getRange('B1').clearContent(); sheet_m.getRange('B2').clearContent(); sheet_m.getRange('B5').setValue(0); sheet_l.clear(); sheet_l.getRange('A1').setValue('第1問'); SpreadsheetApp.getActive().setActiveSheet(sheet_m); } //初期化 function initialize(){ //シート取得 var sheet_m = SpreadsheetApp.getActive().getSheetByName('main'); var sheet_q = SpreadsheetApp.getActive().getSheetByName('question'); var sheet_s = SpreadsheetApp.getActive().getSheetByName('set'); var sheet_l = SpreadsheetApp.getActive().getSheetByName('log'); //setシート if (sheet_s != null){ SpreadsheetApp.getActiveSpreadsheet().deleteSheet(sheet_s); } SpreadsheetApp.getActive().setActiveSheet(sheet_q); sheet_s = SpreadsheetApp.getActive().duplicateActiveSheet().setName('set'); //値クリア sheet_m.getRange('A1').setValue('第1問'); sheet_m.getRange('B1').clearContent(); sheet_m.getRange('B2').clearContent(); sheet_m.getRange('B5').setValue(0); sheet_l.clear(); sheet_l.getRange('A1').setValue('第1問'); SpreadsheetApp.getActive().setActiveSheet(sheet_m); } //問題表示 function questionSet(){ //シート取得 var sheet_m = SpreadsheetApp.getActive().getSheetByName('main'); var sheet_s = SpreadsheetApp.getActive().getSheetByName('set'); var sheet_l = SpreadsheetApp.getActive().getSheetByName('log'); //残問題数からランダムに選択 var randomCount = sheet_s.getRange("E3").getValue(); var range = sheet_s.getRange(Math.floor(Math.random()*randomCount),1,1,3); var values = range.getValues(); //問題表示 var questionCount = sheet_s.getRange("E2").getValue(); sheet_m.getRange(1,2).setValue(values[0][1]); sheet_l.getRange(questionCount+1,2,1,3).setValues(values); sheet_l.getRange(questionCount+1,5).setValue(range.getRow()); } //答え表示 function answerSet(){ //シート取得 var sheet_m = SpreadsheetApp.getActive().getSheetByName('main'); var sheet_s = SpreadsheetApp.getActive().getSheetByName('set'); var sheet_l = SpreadsheetApp.getActive().getSheetByName('log'); var questionCount = sheet_s.getRange("E2").getValue(); var answer = sheet_l.getRange(questionCount+1, 4).getValue(); var answerMsg = 'A:' + answer + '\\n正解しましたか?'; var yes_no = Browser.msgBox(answerMsg,Browser.Buttons.YES_NO); var rightCount = sheet_m.getRange(5, 2); var rightCount_v = 0; if (yes_no == 'yes'){ sheet_l.getRange(questionCount+1, 5).setValue('○'); rightCount_v = rightCount.getValue() +1; }else if(yes_no == 'no'){ sheet_l.getRange(questionCount+1, 5).setValue('×'); rightCount_v = 2; }; rightCount.setValue(rightCount_v); if (rightCount_v == 3){ Browser.msgBox('おめでとう。',Browser.Buttons.OK); }; }
スプレッドシートだけじゃない
Excelマクロのように使える、Excelの代わりになる、と推してきましたが、Google Apps Script はそれだけじゃありません。
実はGoogleが提供する他のサービスにも使えます。
例えばGoogleフォームに入力したデータをGmailで自動送信したり、フォームで入力したデータをスプレッドシートに連携させてまとめることが出来ます。
そして、これから流行ればより機能が拡張され、できることが増えていくでしょう。
みなさんも是非Google Apps Script を触って見てください。一緒に流行らせましょう。
最後までご覧いただきありがとうございました。
そして、これから流行ればより機能が拡張され、できることが増えていくでしょう。
みなさんも是非Google Apps Script を触って見てください。一緒に流行らせましょう。
最後までご覧いただきありがとうございました。
セキュリティ的なところの不安が払拭できない(運用部分が大きいけど)から踏み切るのが難しいけど、できたらスマートに全てオンラインドキュメントに移行したいね。
返信削除構文をみるとjavascript・・・なのかな?
返信削除なかなかよさそうですね