ないすよかったい!
どうも、最近はゾンビ娘にハマりつつある岩井です。
とまんさん(絵描いてる人)のゾンビがやばいです(語彙力)。
Google Apps Script ってなんだろう
Googleが提供するサーバーサイドのスクリプト言語で、
Googleが提供しているサービス全般で利用できるスクリプト、だそうです。
GAS(Google Apps Script)はJavaScriptの互換言語でJavaScriptの文法で記述していきます。
JavaScriptとどう違うの?
基本的には同じような感じですがこんな感じ。
①ES6以降の書き方には対応していない!!
let, const と言ったやつらは使おうとすると怒られます。
②Googleが提供するライブラリが使える!!
これが便利でして、例えばJavaScriptでは日付をフォーマットするのがちょっと面倒だったりします。
// yyyy/mm/dd にしたい! var date = new Date(), today = date.getFullYear() + "/" + (date.getMonth() + 1) + "/" + date.getDate();
のうように力技で合体させたりそれをごにょごにょできるように自作関数にしたりしたり...
ですが、Googleが提供している Utilities.formatDate(date,timeZone,format) を使うと簡単に直してくれます。
// yyyy/mm/dd にしたい! var date = new Date(), today = Utilities.formatDate(date, 'Asia/Tokyo', 'yyyy/MM/dd');
こういったGoogleの便利ライブラリが最初から使えるのと追加することで
その他大勢の方が上げているライブラリも簡単に使うことができます。
もちろん自分で作成してアップロードも可能です。
他にもGoogleSpreadSheetから簡単に要素を取得したりメール送りつけたりと様々なことができるらしいです。
とりあえず触ってみよう!
GASの作成方法は2種類あるのですが、今回は表計算マンなのでスプレッドシートを起点に作成していきたいと思います。
まずはテキトーにテスト用のシートを新規作成します。
メニュバーにある「ツール」→「スクリプトエディタ」を選択してエディタを起動します。
スクリプトエディタが起動するとこんな画面です。↓
ここに書いてある myFunction() の中に書き込んで表計算をしてやろうと思います。
セルの取得と書き込み
最初にシートの中にあるセルに書き込んでみたいと思います。
function myFunction() { var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("シート1"); sheet.getRange("B4").setValue(120); }
これで「シート1」という名のシートにある「B4」セルに「120」と書き込めます。
詳しく見てみましょう。
SpreadsheetApp.getActiveSpreadsheet();
この時点で紐づけているスプレッドシートを取得できます。すごい。
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('ここに取得したいシート名');
getSheetByNameでシート名を指定することで取得するシートを選ぶことができます。
今回の例では「シート1」ですね。
sheet.getRange("ここに取得したいセルの位置");
sheetオブジェクトを取得した後はセルの位置を指定して書き込んでいきます。
getRangeメソッドは指定した座標の情報を取得することができます。
指定方法は何通りかあります。
- "B4" セルの番号で指定
- [2, 4] 行と列を指定
- [2, 4, 1, 8] 行と列を指定しそこから指定した行列分を指定(範囲指定)
sheet.getRange("B4").setValue(120);
さっきのgetRangeで取得した座標に対して指定した値をセットします。
ちなみにgetValueで値を取得することも可能です。
ではでは実際にスプレッドシートに書き込み処理を走らせてみましょう!
メニューにある「実行」から実行したいfunctionを選んで実行してみます。
実行に関しては実行メニューの下らへんにある再生ボタンみたいなやつでも実行可能です。
ショートカットキーとして「ctrl + R」でも大丈夫です。
実行した後にスプレッドシートを確認してみましょう。
!!!!!
やったね!これで表計算ができる!!!!!
表計算させてみる
セルに値を書き込めるようになったので実際に足し算をさせる処理を追加してみます。
function myFunction() { var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("シート1"); sheet.getRange("B4").setValue(120); sheet.getRange("C4").setValue(50000); sheet.getRange("D3").setValue("合計"); sheet.getRange("D4").setValue("=sum(B4:C4)"); }
D4のセルに対してSUM関数を書き込んでみます。
これで実行してみましょう。
B4とC4が足された数値がD4に追加されました。
D4のセルに書かれた内容を確認してみると…
ちゃんとSUM関数で書かれています!!
終わりに
上記の成果物だけでは全くなににも使えないですが、シートの取得、セルの取得が行えればスプレッドシートを編集しなくても内容を書き換えることができます。
これを応用していけば外部APIから取得したデータを一覧表にして出力したり、その表にスプレッドシート感を出す関数を仕込んだり...まさに夢は無限大です。
わりと簡単な内容ですが、誰かのなにかのお役に立てれば幸いです。