#contents ** Google Apps Scriptとはなにか? [#l030c051] - 概要: Google の各サービスを制御するためのスクリプト - 公式サイト: https://developers.google.com/apps-script/ - 知識: JavaScript - 準備: ブラウザ / Googleアカウント ** 開発の準備をしていこう [#m02b94c8] + Google Drive >> "GAS_lessons" フォルダを作成 + Google Sheets >> "MySpreadsheet" を作成 + Tools >> Script editor... より "MyProject" スクリプト作成 + デフォルトの Code.gs を "MyScript.gs" へ名称変更 + View >> Compact controlls を選択しエディタを最大化 ** Hello Worldを表示させよう [#jf3f80bf] - &color{red}(*); GAS は Google のサーバー上で実行されるためブラウザ上の部品を使った操作(ダイアログ表示等)は不可 - &color{red}(*); 下記コードは実行エラーとなる function hello() { alert("hello"); } - ログに hello world を表示させる(View >> Logs より確認可能) function hello() { Logger.log("hello world"); } - スプレッドシート上に hello! を表示させる - &color{red}(*); 実行時に Authorization required ダイアログが表示されるため Review Permissions >> Allow で承認 function hello() { Browser.msgBox("hello!"); } ** カスタム関数を作ってみよう [#r88e1e80] - スプレッドシート上で "=関数名()" で利用可能なカスタム関数を作成 - 引数の値を2倍する関数 function getDouble(n) { return n * 2; } ** シートの値を操作してみよう [#s4f0beb6] - 対象を選択して処理をする(App > ActiveSpreadsheet > ActiveSheet > Range の順に指定) - A1セルを指定して 100 を挿入する関数 function setData() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getActiveSheet(); var range = sheet.getRange("A1"); range.setValue(100); } ** リファレンスを読み解いてみよう [#edbf2044] - 公式サイト >> REFERENCE >> Spreadsheet >> SpreadsheetApp を選択すると標準の Methods 一覧を確認可能 - Range(1, 2) を選択し 100 を挿入し背景色を変更する function setData() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getActiveSheet(); var range = sheet.getRange(1, 2); range.setValue(100); range.setBackground("#ff0000"); } ** テストデータを作成してみよう [#s9665ca7] - 1列目の1〜20行目に配列で定義した名前をランダムに挿入 - 2列目の1〜20行目にランダムな数値を挿入 function initSheet() { var sheet = SpreadsheetApp.getActiveSheet(); var names = ["taguchi", "fkoji", "dotinstall"]; sheet.clear(); for (var i = 1; i <= 20; i++) { sheet.getRange(i, 1).setValue(names[Math.floor(Math.random() * names.length)]); sheet.getRange(i, 2).setValue(Math.floor(Math.random() * 101)); } } ** 結果の判定をしてみよう [#y5e2644f] - 2列目の値が70点以上であれば3列目に"OK"を表示し背景色を変更 function getResults() { var sheet = SpreadsheetApp.getActiveSheet(); for (var i = 1; i <= sheet.getLastRow(); i++) { if (sheet.getRange(i, 2).getValue() >= 70) { sheet.getRange(i, 3).setValue("OK").setBackground("green"); } else { sheet.getRange(i, 3).setValue("NG").setBackground("red"); } } } ** addMenu()を使ってみよう [#v22d4aa6] - 関数をスプレッドシート内のメニューに仕込む function showMenu() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var menu = [ {name: "初期化", functionName: "initSheet"}, {name: "判定", functionName: "getResults"} ]; ss.addMenu("処理メニュー", menu); } ** onOpen()、onEdit()を使ってみよう [#n4feab4d] - onOpen(): スプレッドシートが開かれた時に実行される関数 function onOpen() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var menu = [ {name: "初期化", functionName: "initSheet"}, {name: "判定", functionName: "getResults"} ]; ss.addMenu("処理メニュー", menu); } - onEdit(e): 編集された時に実行される関数 - 編集された時に編集者をコメントに追加する function onEdit(e) { e.range.setComment("Edited by: " + e.user); }