#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);
 }

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS