Googleを追いかけろ!

.
    Google Apps Script には simple event handlersinstallable event handlers があります。これらは イベントに応じて実行される(関数)機能を特定するための簡単な方法を提供します。

    毎日特定の時刻に実行させたいとか、Google Docs 上でユーザーがデータコレクション用のフォームを送信した後に実行させたい・・等の動作を実現させることができます。

    ユーザーガイド/目次 参照ページ(Goolge)

価格.com ブロードバンド

WWW を検索 Googleを追いかけろ! を検索



イベントへの応答スクリプトを実行する

システムの詳細や差異を解説する前に、イベントという用語を少し明らかにしましょう。一般的にはイベントとは下の例にあるような、何かが生じるここと捕らえられています。
  • 時計が1時を告げる
  • スプレッドシートが開く
  • スプレッドシートが編集される
  • フォームが送信される
これらのイベントは”イベントハンドラー”とか”イベントトリガー”(単にトリガー)などとして他の多くのコンピューター言語で知られており、 これは Google Apps Script においても同様です。イベントに応答して呼ばれるコードがイベントハンドラーです。いつもではありませんが、 イベントを説明するパラメーターを受け取ります。そしてこのパラメーターこそイベントと呼ばれるものです。

単純なイベントハンドラー

Google Apps Script language には簡単なイベントハンドラーが組み込まれています。関数を実行するイベントの型である印として関数に特別な名前を与えます。 以下の環境下でスクリプトや関数を実行するためのイベントハンドラー利用します。
  • onInstall関数 ・・スクリプトがインストールされたとき
  • onOpen関数 ・・スプレッドシートが開かれたとき
  • onEdit関数 ・・スプレッドシートが編集されたとき

これら単純なイベントハンドラーはスプレッドシートの編集者の行為に応じて実行され、同じユーザーコンテキストのもとで実行されます。つまり、もし ボブがシートを開けば onOpen 関数はだれがスプレッドシートにスクリプトを書き加えたかとは無関係に実行されます。 このため、単純なイベントハンドラーは許可できるものが限られます。

  • イベントハンドラーは実行者が誰かを決定できない
  • どのようなサービスもユーザーとしてアクセスできない(つまり、Translate と UrlFetch は匿名でもアクセスできるが、Calendar, Mail, Site についてはアクセスできない)
  • カレントシートのみ変更できる(他のスプレッドシートへのアクセスは禁止されている)
  • スクリプトを含むスプレッドシートは編集のために開くことができる(これはイベント処理の種類によって多少暗示されるが、明示的に示すべきである)

onOpen()

onOpen()関数 はユーザーが編集のためにスプレッドシートを開くと自動的に実行される関数です。もっとも一般的な使われ方は スプレッドシートのメニューバーにカスタムメニューを追加する時でしょう。
// onOpen関数はスプレッドシートが開けられる度に自動的に実行される
function onOpen() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var menuEntries = []; // When the user selects "addMenuExample" menu, and clicks "Menu Entry 1", the function function1 is executed. menuEntries.push({name: "Menu Entry 1", functionName: "function1"}); menuEntries.push({name: "Menu Entry 2", functionName: "function2"}); ss.addMenu("addMenuExample", menuEntries); }

onEdit(event)

この関数の意味するところは、スプレッドシートのどこかのセルが編集されたときに自動的に実行されるということです。 非常に単純な使用例として、編集されたセルに更新時刻の記録を残すことでしょう。関数に渡されたパラメーターの e はプロパティを 一つ持っています - source - まさに編集されたスプレッドシートそのものです。
function onEdit(event)
{
  var ss = event.source.getActiveSheet();
  var r = event.source.getActiveRange();
  r.setComment("Last modified: "+(new Date()));
}

onInstall()

Script Gallery からスクリプトをインストールしたときに呼ばれるのが onInstall 関数です。 使われ方としては onOpen() とほとんど同じと考えてよいでしょう。ユーザーのためにカスタムメニューをセットすることです。 スクリプトがスプレッドシートにはじめて挿入されたとき、スプレッドシートは開く状態には無いため onOpen は呼ばれません。 そこで、onInstall() から直接 onOpen() を呼びます。
function onInstall()
{
  onOpen();
}
インストール可能なイベントハンドラーは、スクリプトエディタ内のトリガーメニューに設定されてされています。このドキュメントでは これらをトリガーと呼んでいます。次のようなイベントを発生させるときは、スクリプトを実行させるためにトリガーを利用します。
  • 特定の時刻になった時 - 年、月、週、日、時刻、分、秒を特定できる
  • フォームが送信されたとき
  • スプレッドシートが編集されたとき - onEditとは異なり、インストールイベントハンドラーがトリガーをインストールしたユーザーとして動作することができる
  • スプレッドシートが開いたとき - onOpenとは異なり、インストールイベントハンドラーがトリガーをインストールしたユーザーとして動作することができる

トリガーはスクリプト内のひとつまたはそれ以上の関数と連携させることができます。また、すべての関数は、複数の接続トリガーを持つことができます。 そして、関数にトリガー属性を付け加えれば、トリガーの動作をより絞り込むことも可能です。

トリガーによってスクリプトが呼ばれたとき、スクリプトはトリーガーをインストールした本人確認を行います。利用者の確認ではありません。 これはセキュリティ上の理由です。

イベントハンドラーのインストールにはスクリプトの内容如何によって emailCalendar 等のサービスへのアクセスに管理権限を求めます。

インストール可能なイベントハンドラー

インストール可能なイベントハンドラーでは時刻に基づくトリガーの利用ができます。インストール可能なイベントハンドラーは、単純なイベントハンドラーといくつかの類似性を持っていますが、 次の相違点があります。
  • ハンドラーを挿入したユーザーとして実行する - イベントをトリガーしているユーザーではない
  • ハンドラーを挿入したユーザーが利用可能なすべてのサービスへアクセスできる可能性がある
  • 単純なイベントハンドラーへのアクセス制限のないすべてのことが可能なスクリプト
  • 処理されているイベントをだれがトリーガーしたかは決定できない。この点は、clock tick(タイマー割り込みと次のタイマー割り込みの間の時間) にとっては重要ではない。ユーザーが変更するドキュメント変更イベントにおいてドキュメントが特定されなければならない必要が無いから。
  • スクリプトを含むスプレッドシートが開いている必要性はない

時間駆動型トリガーの使用

毎日、毎時間、各週の決められた日にスクリプトを実行させるためのトリガーの設定方法です。

指定した時刻(毎)に実行させる

  1. 新規スプレッドシートを用意します。
  2. 保存します。
  3. Tools > Scriptsを選択します。
    • Script editorで新規スクリプトを書きます。
    • スクリプトをシートに挿入するためにInsertを選択
  4. もしScript Editoが開いてなかったら Tools > Scripts > Script editor を選択
  5. Triggers > Current script's triggers を選択 No triggers set up. Click here to add one now.のメッセージパネル が表れる
  6. リンクをクリック
  7. 【Run】の項目からトリガーによって実行したい関数を選択
  8. 【Events】の項目からSpreadsheetを選択
  9. 次のドロップダウンリストからOn-open,On-edit,またはOn-form-submitのいずれかを選択
  10. 保存する * On editを利用した例

イベントの詳細

イベントはすべてのイベントハンドラーからparameter (e)という形で渡されます。parameter (e)には詳しい属性を追加できます。 トリーガーの働きやスクリプトがトリガーされた方法に関する情報をキャプチャするような定義付けです。

もし属性を利用するのなら、前述したようにトリガーメニューからトリガーをセットしておかなくてはなりません。

次の例はフォームが送信されたときにスプレッドシートによってキャプチャーされた個々の情報を含むようにデザインされたメールを送信する 関数です。

// フォームが2つのフィールド(name と age)を持っていると仮定した場合
function onFormSubmit(e) { var name = e.values[0]; var age = e.values[1]; var timestamp = e.values[2]; var submitter = e.values[3]; MailApp.sendEmail ("email_username", "form submitted", name + ", age " + age + " submitted by " + submitter + " on " + timestamp + ".") }
この関数の中でparameter e はキャプチャーされてスクリプトに使用されるイベントについての詳細を確定します。 Spreadsheet form-submit イベントでは e.values にアクセスできます。Google Apps を利用することで、 送信者名を自動的に記録するオプションをフォームに持たせることができ、e.namedValues['Username'] としてスクリプトに利用することができるのです。

上の例では e.values はユーザーによって送信されたフォーム内容の値すべてを持つ e.values[0],e.values[1].... e.values[n] に相当する配列です。 ここではスプレッドシートの列順と一致した列順の値になっています。

下はトリガーに利用可能な属性をまとめた表です。

イベントハンドラーにおけるエラー

イベントハンドラーに失敗した時、Script Editor からスクリプトを実行しているときはエラーが分かりません。 スクリプトのどこでエラーが生じているのか判断するには、スクリプトを try-catch コードブロックで囲んでください。 これはエラー情報をキャプチャーしてエラーメッセージのメール通知をくれる特別なコードです。
function myFunction() {
try {
  // ここにスクリプトコード
} catch (e) { MailApp.sendEmail("youremail@example.com", "Error report", e.message); } }



    * ユーザーガイド/目次
    1. ユーザーガイド/Google Apps Script の概要
    2. Getting Started/Google Apps Scriptをはじめよう
    3. Writing Scripts/スクリプトを書く
    4. Common Tasks/一般的なタスクのプログラミング
    5. Events/イベントへの応答スクリプト
    6. User Interfaces/ユーザーインターフェースの組み込み
    7. Using GUI Builder/GUI ビルダー の使用
    8. Security/セキュリティ
    9. Troubleshooting/トラブルシュートとデバッグ
    -- ユーザーガイド 5. イベントへの応答スクリプト : end -- 2011/10/30