かまてく ブログ

今日の努力は、明日の経験! - Kamakura Shinsho Engineer Blog

Google Apps Scriptを使って表計算してやる

ないすよかったい!
どうも、最近はゾンビ娘にハマりつつある岩井です。
とまんさん(絵描いてる人)のゾンビがやばいです(語彙力)。

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');

https://developers.google.com/apps-script/reference/utilities/utilities?hl=ja#formatDate(Date,String,String)

こういったGoogleの便利ライブラリが最初から使えるのと追加することで
その他大勢の方が上げているライブラリも簡単に使うことができます。
もちろん自分で作成してアップロードも可能です。

他にもGoogleSpreadSheetから簡単に要素を取得したりメール送りつけたりと様々なことができるらしいです。

とりあえず触ってみよう!

GASの作成方法は2種類あるのですが、今回は表計算マンなのでスプレッドシートを起点に作成していきたいと思います。
まずはテキトーにテスト用のシートを新規作成します。
メニュバーにある「ツール」→「スクリプトエディタ」を選択してエディタを起動します。 Image from Gyazo スクリプトエディタが起動するとこんな画面です。↓ Image from Gyazo ここに書いてある 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で値を取得することも可能です。

ではでは実際にスプレッドシートに書き込み処理を走らせてみましょう!

Image from Gyazo

メニューにある「実行」から実行したいfunctionを選んで実行してみます。
実行に関しては実行メニューの下らへんにある再生ボタンみたいなやつでも実行可能です。
ショートカットキーとして「ctrl + R」でも大丈夫です。

実行した後にスプレッドシートを確認してみましょう。

Image from Gyazo

!!!!!
やったね!これで表計算ができる!!!!!

表計算させてみる

セルに値を書き込めるようになったので実際に足し算をさせる処理を追加してみます。

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関数を書き込んでみます。
これで実行してみましょう。

Image from Gyazo

B4とC4が足された数値がD4に追加されました。
D4のセルに書かれた内容を確認してみると…

Image from Gyazo

ちゃんとSUM関数で書かれています!!

終わりに

上記の成果物だけでは全くなににも使えないですが、シートの取得、セルの取得が行えればスプレッドシートを編集しなくても内容を書き換えることができます。
これを応用していけば外部APIから取得したデータを一覧表にして出力したり、その表にスプレッドシート感を出す関数を仕込んだり...まさに夢は無限大です。

わりと簡単な内容ですが、誰かのなにかのお役に立てれば幸いです。

鎌倉新書では正社員を積極採用しています!

(WEBデザイナー)デザインからコンセプト設計まで■賞与実績4ヶ月分■

仕事内容 【仕事内容】 ■ポータルサイト(お墓・葬儀・仏壇)のWebサイト構築のためのWebデザインの設計からコーディング業務まで担って頂きます。 特に事業側のコンセプトを理解しながら、LPやサイトのデザイン設計を提案できる方を求めています。 【提供できる価値・経験】 ■細かく数字を見て、サービスをグロースさせていく経験 1週間単位でスプリントを組んで、数多くの機能をリリースさせていく開発プロセスを導入しています。 数多くのトライ&エラーを行い、きっちり効果を分析していくことで、サービスを着実に成長させるプロセスが身につきます。 また、事業側のWebディレクターとも密にコミュニケーションを取りながら、事業会社ならではの一体感を持ったクリエイティブワークを実践しています。 ■今後大きく成長するマーケットにおけるサービス開発に携わることができる経験 世界一の高齢化社会である日本においてライフエンディング業界は大きなポテンシャルを持っています。 その業界に必要なサービスを提供することで、大きなユーザーの需要を満たすサービスを提供するやりがいと経験を得ることができます。 また、今の日本社会で必要とされているサービスを提供しているという社会貢献も大きなやりがいとして持つことができます。 【デザインの特徴】 ■企画構想段階から関わり、ユーザー視点に立ったUIの設計、ビジュアルデザイン ■色彩学、構成学、視覚生理学などの知識を生かしたデザイン ■プロジェクトの成功に貢献するデザイン(目的を本質的に達成するデザイン) ■問題点や課題、目的をしっかり理解し、解決するデザイン 応募資格 【必須(MUST)】 ■Webサービスのデザイン・コーディング経験 ■WebサービスやスマートフォンアプリのUI・情報設計の経験 ■Photoshop、Illustratorなどの画像処理ソフトを使用したビジュアルデザイン業務 【歓迎(WANT)】 ■情報の可視化 ■部分遷移、画面遷移を含むプロトタイプ構築経験 ■デザインコンセプトの言語化 ■ユーザー体験の設計業務 ■デザインのトーン&マナー設計 ■プロダクト改善経験 ▼求める人物像 ・自発的に施策を立案・実行できるマインドを持つ方 ・成長環境の中で自分を試してみたい方 ・数字の分析に強い方 ・コミュニケーション能力 ・課題発見力、解決力 続きを見る