LoginSignup
5
9

More than 5 years have passed since last update.

グーグル・スプレッドシートでマクロを書こうぜ

Last updated at Posted at 2017-04-07

関連記事:http://qiita.com/muzudho1/items/deea9da28b0f5b0c3695

グーグルのスプレッド・シートでマクロが書けるらしい。

そういえば前に Libre Office Calc でマクロを組んだのだった。
http://qiita.com/muzudho1/items/dcd876a26a223045535c

今度はできるだろうか? 調べてみよう。

「[Tool] Google SpreadSheetでマクロを使って作業を効率化」YoheiM.NET
http://www.yoheim.net/blog.php?q=20130412

目標

表のデータを JSON形式に変換して 何かで表示して確認する。

A列 B列 C列
名前 年齢(歳) 体重(kg)
一郎 13 50
二郎 12 48
三郎 11 47

テストデータはこんなものでいいだろう。1行目はヘッダーなので 読み飛ばしたい。

Gazo

[ツール] - [スクリプト エディタ...] と進んでみる。

Gazo

Gazo

自信がないぞ。
さっき掲載したURLから ソースコードを貼り付けよう。

Gazo

Ctrl + S キーで保存できるだろうか?

Gazo

実行なんか できないよなあ。関数定義を書いただけだし。

Gazo

次、何したらいいのかわからん。作業の流れを分かってない。勘で進む。

Gazo

ストアに置くとか、そんなことがしたいのではなかった。
練習用のスプレッドシートから 練習で作ったマクロを呼び出すとか どうやるのか?

Gazo

と思ったら 後ろに隠れたウィンドウで ダイアログボックスが出ていた。
なんだ この しっちゃかめっちゃか な配列の要素の並びは……。

2行目を ヘッダー だと思ってるのか。
サンプル・プログラムの中身も読まないとダメか。

Gazo

おっ、ここをいじれば いいのでは……(^q^)

Gazo

やったぜ!

追記

Gazo

編集が終わったら JSON を ウェブ・アプリケーション・サーバーにフォーム送信しようかと思ったんだが、こんなんを選んでおけばいいのだろうか?

ボタンは どこにあるんだ?
「編集時」と「値の変更」の違いもわからん。

「Google Spreadsheetのトリガーの「編集時」と「値の変更」の違いを検証してみた」まだ中学生のブログ
http://madachugakusei.hatenablog.com/entry/2015/10/18/140439

編集が終わったかどうかのイベントは無いようなので、「編集時」を使って 編集が終わったかどうかは自分のプログラムで判断しろ、とのことらしい。

「【幹事必見!】スプレッドシートの入力が完了したらチャットワークに自動で通知する方法」いつも隣にITのお仕事
http://tonari-it.com/gas-spreadsheet-chatwork/

Gazo

onEdit関数を書いておくと 保存時に実行されるらしい。トリガーの設定なんか要らんかったんや……。

「Googleのスプレットシートで変更した内容をGoogle Apps Script経由でチャットワークに通知するライフハック的なものを作った話。」Qiita
http://qiita.com/n0bisuke/items/ed99da94aba342af3cdc

Gazo
ここをコメントアウトして 全体を onEdit関数にした。これで十分。

この JSON を フォーム送信したいぞ。はてさて。

POST送信したいぞ

グーグル・スプレッドシートでは 「フォーム送信」は別の意味になるのか。じゃ、POST送信したいぞ。

「Google Apps ScriptからHTTP POST」Qiita
http://qiita.com/n0bisuke/items/a31a99232e50461eb00f

「Class UrlFetchApp」Google Apps Script
https://developers.google.com/apps-script/reference/url-fetch/url-fetch-app#fetch(String,Object)

Gazo

こんな風に書いておけば POST送信されているんだろうか?
受け取り口の方を作っておかないと 分からん……。

受信側を PHP で書こうぜ?

「PHPでフォームからデータを受け取る方法(GETとPOST)」techacademy
https://techacademy.jp/magazine/4955

<?php
if(isset($_POST['comment'])){
$comment = $_POST['comment'];
echo $comment;
}
?>

こんなんでいいのか?

書き直してみた。

try_post.php

<?php
if(isset($_POST['datas'])){
    $datas = $_POST['datas'];

    // ファイル書込み
    $file = 'try_post_data.txt';
    // ファイルをオープンして既存のコンテンツを取得します
    $contents = file_get_contents($file);
    // ファイルに追記します
    $contents .= $datas . "\n";
    // 結果をファイルに書き出します
    file_put_contents($file, $contents);

    echo 'try post!(^q^)';
    echo $datas;
}
else
{
    echo 'no post-data!(^q^)' . "\n";
    $contents = file_get_contents('http://★サイトアドレス/try_post_data.txt');
    echo $contents;
}

try_post_data.txt を書き込み許可パーミッションで用意しておく。

グーグル・スプレッドシートにメニューを追加しよう

// グーグル・スプレッドシートを開いたとき
function onOpen() {
  // メニューバーにカスタムメニューを追加
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var entries = [
    {name : "データを送信"  , functionName : "submitData"},
  ];
  spreadsheet.addMenu("ランキング", entries);
}

// メニューから実行する
function submitData(){
  // ここに処理を書く
}
5
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
9