関連記事: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行目はヘッダーなので 読み飛ばしたい。
[ツール] - [スクリプト エディタ...] と進んでみる。
自信がないぞ。
さっき掲載したURLから ソースコードを貼り付けよう。
Ctrl + S キーで保存できるだろうか?
実行なんか できないよなあ。関数定義を書いただけだし。
次、何したらいいのかわからん。作業の流れを分かってない。勘で進む。
ストアに置くとか、そんなことがしたいのではなかった。
練習用のスプレッドシートから 練習で作ったマクロを呼び出すとか どうやるのか?
と思ったら 後ろに隠れたウィンドウで ダイアログボックスが出ていた。
なんだ この しっちゃかめっちゃか な配列の要素の並びは……。
2行目を ヘッダー だと思ってるのか。
サンプル・プログラムの中身も読まないとダメか。
おっ、ここをいじれば いいのでは……(^q^)
やったぜ!
追記
編集が終わったら JSON を ウェブ・アプリケーション・サーバーにフォーム送信しようかと思ったんだが、こんなんを選んでおけばいいのだろうか?
ボタンは どこにあるんだ?
「編集時」と「値の変更」の違いもわからん。
「Google Spreadsheetのトリガーの「編集時」と「値の変更」の違いを検証してみた」まだ中学生のブログ
http://madachugakusei.hatenablog.com/entry/2015/10/18/140439
編集が終わったかどうかのイベントは無いようなので、「編集時」を使って 編集が終わったかどうかは自分のプログラムで判断しろ、とのことらしい。
「【幹事必見!】スプレッドシートの入力が完了したらチャットワークに自動で通知する方法」いつも隣にITのお仕事
http://tonari-it.com/gas-spreadsheet-chatwork/
onEdit関数を書いておくと 保存時に実行されるらしい。トリガーの設定なんか要らんかったんや……。
「Googleのスプレットシートで変更した内容をGoogle Apps Script経由でチャットワークに通知するライフハック的なものを作った話。」Qiita
http://qiita.com/n0bisuke/items/ed99da94aba342af3cdc
ここをコメントアウトして 全体を 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)
こんな風に書いておけば 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(){
// ここに処理を書く
}