月別アーカイブ: 2019年11月

[GAS] フォームの送信時トリガーの多重実行

スプレッドシートをフォームとリンクして、フォームからの書き込みがあったときにスクリプトを動作させるトリガーが「フォームの送信時」トリガーである。これにバグがあるようで、フォームに回答が1回しかないのに、トリガーをかけているスクリプトが複数回実行されることがある。あとから実行されたスクリプトではeに値が入っていないので、ファイルへの書き込むなどに支障がでる。

代表的な回避策としては、スクリプトをスプレッドシートではなくフォームの方に記述し、スクリプトを介してスプレッドシートへの値書き込みを行うというものがある。ほかには、スプレッドシートのスクリプトでsleepを数秒かけたり、eの値が入っていないときに処理を止める条件分岐を付ける手法がある。

フォームのスクリプトの基本的な作り方はGASのonFormSubmit()でハマったことを参照。あとはreferenceでも読んで試してみる。スプレッドシートに書き込むには、appendRowすればいい。フォームへの回答の中身は以下で確認できる。ファイルのアップロードは、Drive上のファイルIDが回答になる。

function onFormSubmit(e){
  var mail = e.response.getRespondentEmail();
  Logger.log(mail);
  var date = e.response.getTimestamp();
  Logger.log(date);
  
  var itemResponses = e.response.getItemResponses();

  for (var i = 0; i < itemResponses.length; i++) {
    var itemResponse = itemResponses[i];
    var title = itemResponse.getItem().getTitle();
    var value = itemResponse.getResponse();
    Logger.log('["%s"] Title "%s", Value "%s"', i, title, value);
  }
}

便利そうなやつ
Googleフォームのプルダウンにスプレッドシートの内容を反映させる

2019年10月

10月の走行距離は311kmでした。

電費は7.8 km/kWhで9月より0.2改善しました。冷房が要らなくなってきましたが、夜はステリングヒーターを点けるときがあります。

月額2,160円のZESP2に対して、ガソリン140 円/Lとして燃費20.2km/Lと同等です。

急速充電 7回、普通充電は0回、急速充電1回あたりの走行距離は44 kmでした。

[GAS] GASを使ってもらうようにする導入資料

GASを知らない同僚にGASを使う価値を理解してもらい、学習を始めるきっかけを与えるために有用な資料を集める。

GASの価値を理解してもらう

Google Apps Script (GAS) で毎週 30 分の雑務を自動化した話
毎月 500 時間の社内ルーティンワークを GAS を使って自動化した話
ともにグロービスのYuki Tanabe氏が社内業務にGASを活用したケースを紹介している。ありがちな事務作業が対象で、自職場での活用イメージがわきやすい。

GASの学習を始める最初の一歩

非プログラマの事務員にGASをいきなり書かせるのは難しい。まずはマクロやちょっとした関数として使ってもらう。Google Apps Script ハンズオン資料にあるような具体的なケースを与えて、一緒にプログラムを作る経験を積ませる。慣れてきたらGAS ビギナーが GAS を使いこなすために知るべきこと 10 選で紹介されているような一段階高度な内容を教えるとともに、自分だけでプログラムを描けるように励ます。

【保存版】初心者向け実務で使えるGoogle Apps Script完全マニュアル
実例が非常に豊富

GAS使わなくても便利な機能があることも同時に教える

非プログラマには、プログラムを書くのは魔法を覚えるようなもの。はじめは何でもできるような気がするが、仕事では投入する時間やリソースと利益を秤にかける必要がある。車輪の再発明をしないためにも、既存の機能を学ぶことも推奨する。

たとえば、Google ドキュメントの音声認識機能(ツール>音声入力)。音声からかなり正確に文章を生成してくれる。まさに魔法のようだ。音声入力はキーボード操作が得意でない層にアピールするだろう。音声入力以外に翻訳機能もある。

[GAS] Google Apps Scriptでハッシュ化する関数

GASで送信したメールのリンクを踏むと受領確認できる仕組みにはURLクエリパラメータを使えばいい。しかし、ユーザーIDのような意味のある値をあからさまにURLに付加するのはやりたくない。そんなときは受け渡すパラメータの値をハッシュ化すればいい。

Google Apps ScriptではcomputeDigest関数でアルゴリズムを指定して簡単にハッシュ値を取得できる。使用可能なアルゴリズムは、MD2, MD5, SHA-1, SHA-256, SHA-384, SHA-512, (2019/11/1現在)。

たとえば、スプレッドシートの何行目の値を編集するかをクエリで指示する際に、行数を指定する情報とユーザーIDを結合した文字列をハッシュ化したものをスプレッドシートの同じ行に書き込んでおく。このハッシュ値で検索すれば、あからさまにユーザーIDや行を特定する情報をパラメータに含まなくても、該当する行を選択することができる。

参考
スプレッドシートで覚えるブロックチェーン |「もしかして渡した値」「入れ替わってる!?」