【初心者向け】Google Apps Script から始めるjavascript入門に参加させていただきました

2019/08/14(水)に株式会社サイトビジットで開催された、【初心者向け】Google Apps Script から始めるjavascript入門に参加させていただきました。そこで得られた知見を共有したいと思います。
https://sight-visit.connpass.com/event/130314/

スポンサーリンク

Contents

勉強会に参加した理由

Google Apps Scriptを活用することで、特にGoogleのサービスを連携・自動化できると考えており、その理解をさらに深めるために参加しました。

準備

事前に準備していただいた、こちらのスプレッドシートを自分のアカウントにコピーしてから作業しました。
https://docs.google.com/spreadsheets/d/1w3MgFVugATL2S_yeociPMWGbrbJQBlAVPgk9Y5Q5R8Y/edit#gid=1164252168

GASを使うメリット

環境構築の必要がない
API連携してれば、なんでもできる
業務に直結する

GASでできること

Gmail操作、Googleカレンダー操作、Google document や Google drive 操作やjobの実行など、Googleのサービスに関わることなら何でもできる。
例:
毎朝9時に実行してください(日時をトリガーでバッチ処理)
自動tweet
スクレイピング例:営業のための自動での情報収拾)
アプリやAPI作成も可能

GASの基礎

function myFunction() {
  var GA_SHEET = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("GAS");
  for(var i = 2; i <= GA_SHEET.getLastRow(); i++) {
    var x = GA_SHEET.getRange(i, 1).getValue();
    var y = GA_SHEET.getRange(i, 2).getValue();
    var total = mySum(x, y);
    GA_SHEET.getRange(i, 3).setValue(total);
    if((total % 2) == 0) {
      GA_SHEET.getRange(i, 4).setValue('偶数');      
    } else {
      GA_SHEET.getRange(i, 4).setValue('奇数');
    }
  }  
}
function mySum(x, y) {
  return x + y;
}

・「GAS」というシートを持ってくる
SpreadsheetApp.getActiveSpreadsheet().getSheetByName(“GAS”);
GA_SHEET.getLastRow();

・i行目の1列目の値を取得
var x = GA_SHEET.getRange(i, 1).getValue();

・for文
for(初期値; 上限値; 増減値) {
iがGASの最終行まで達したら終了
i <= GA_SHEET.getLastRow()

課題1

シート:Practice1
ABC列の情報を取得し、E列に「_」区切りで記入。完了したらF列に「TRUE」を記入します。

function myFunctionP1() {
  var PRACTICE_SHEET = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Practice1");
  for(var i = 2; i <= PRACTICE_SHEET.getLastRow(); i++){
    var A = PRACTICE_SHEET.getRange(i, 1).getValue();
    var B = PRACTICE_SHEET.getRange(i, 2).getValue();
    var C = PRACTICE_SHEET.getRange(i, 3).getValue();
    var total = mySum(A, B, C);
    PRACTICE_SHEET.getRange(i,5).setValue(total);
    PRACTICE_SHEET.getRange(i,6).setValue("TRUE");
  }
}

function mySum(A, B, C) {
  return A + "_" + B + "_" + C;
}

課題2

シート:Practice2
F列に「TRUE」がある行はそのまま。無い場合のみ、課題1と同じ処理をE列に入力。

function myFunctionP2() {
  var PRACTICE_SHEET = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Practice2");
  for(var i = 2; i <= PRACTICE_SHEET.getLastRow(); i++){
    var F = PRACTICE_SHEET.getRange(i, 6).getDisplayValue();
    if (F !== "TRUE"){
    var A = PRACTICE_SHEET.getRange(i, 1).getValue();
    var B = PRACTICE_SHEET.getRange(i, 2).getValue();
    var C = PRACTICE_SHEET.getRange(i, 3).getValue();
    var total = mySum(A, B, C);
    PRACTICE_SHEET.getRange(i,5).setValue(total);
    PRACTICE_SHEET.getRange(i,6).setValue("TRUE");
    }
  }
}

function mySum(A, B, C) {
  return A + "_" + B + "_" + C;
}

型によるエラーが発生したので、getDisplayValueで値を取得することにしました。

・getValue()
データの型そのままで、取得される。

・getDisplayValue()
表示されているものを、そのまま文字列で取得する。
数値やtrue/falseも文字列として取得できる。

課題3

シート:Practice3
F列が空欄の方のみ、課題1と同じ処理をでE列を入力。
以下のメールを送信する。
件名「{姓}様 LGTMです」、本文「E列の値」
そして、F列にTRUEを入力。
さらに、F列の箇所を変更しても送信できるか試してみる。

function myFunctionP3() {
  var PRACTICE_SHEET = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Practice3");
  
  for(var i = 2; i <= PRACTICE_SHEET.getLastRow(); i++){
    var F = PRACTICE_SHEET.getRange(i, 6).getDisplayValue();
    if (F !== "TRUE"){
      var A = PRACTICE_SHEET.getRange(i, 1).getValue();
      var B = PRACTICE_SHEET.getRange(i, 2).getValue();
      var C = PRACTICE_SHEET.getRange(i, 3).getValue();
      var total = mySum03(A, B, C);
      PRACTICE_SHEET.getRange(i,5).setValue(total);
      
      var address = PRACTICE_SHEET.getRange(i, 4).getValue();
      var subject = mySum04(B);
      
      MailApp.sendEmail(address, subject, total);  
      
      PRACTICE_SHEET.getRange(i,6).setValue("TRUE");
      
    }
  }
}

function mySum03(A, B, C) {
  return A + "_" + B + "_" + C;
}
function mySum04(B) {
  return B + "様 LGTMです";
}

・Gmailからのメール送信
MailApp.sendEmail(‘address@address.com’, ‘タイトル’, ‘本文’);
MailApp.sendEmail(address, subject, total);

github

https://github.com/blackdesigntokyo/handson/tree/master/GAS/20190814_SiGHTViSiT_1

参考

行と列の英語表記

Row:行   Column:列
(Row , Column)

まとめ

分からない箇所について質問した際も、答えをそのまま教えてくれるという形ではなく、問題解決のためのヒントと、解決の糸口となる情報収拾のやり方を教えていただき、とてもためになりました。
今回は初級編という形ですが、中級編・上級編など企画していただければ、ぜひ参加したいです。

イベント概要

https://sight-visit.connpass.com/event/130314/
非エンジニア向けのプログラミング勉強会です!

雑務が多くて本業に集中できない
時間があってもあっても全然足りない
プログラミングで自動化出来そうな気がするがとっつきにくい
そんなお悩みはありませんか? プログラミングを覚えればそんな日常業務を自動化することができます!
GAS(Google Apps Script)は応用範囲が非常に広く、使い方次第ではWebサイトを作ることもできます!
そんなGASを使ってプログラミングを触ってみましょう!

スポンサーリンク