Google公式User Guideの勝手翻訳
共通プログラミングタスクカスタムメニューとポップアップメッセージの制作スプレッドシートにカスタムメニューを追加して、スクリプトの特定の関数へリンクするように、メニューアイテムを加えるのは難しいことではない。 簡単な例を示そう。メニューバーにSurpreisesというメニューを追加する。そこにはメニューアイテムは二つ、Surprise 1とSurprise 2だ。その内のどちらか一つを選ぶと、それによって関数はメッセージボックスを表示する。 function onOpen() { 普通は、スプレッドシートが開かれると同時に、カスタムメニューが表示されるようにしたいと思うだろう。それをするには、 スクリプト例では、メニューエントリは次のコードのように定義されている。 var menuEntries = [ {name: "Surprise 1", functionName: "menuItem1"}, 変数 メニューエントリの定義のあとはメニューそのものの定義が来る ss.addMenu("Surprises", menuEntries); メニューラベルはSurprisesで、 ここに一般的なメニューを作成するコードを示す function onOpen() { 次のコードは新たなメニューのメニューアイテムを選択した時にメッセージボックスを表示させる。 function menuItem1() { 次は普遍化されたコード function yourFunctionName() {
より良いパフォーマンスのためのスクリプトの最適化ただ二つの基本原則を理解するだけで、スクリプトから最大限のパフォーマンスを引き出すことができる
次の二つの章でこの原則の詳細を見てみよう。 他サービス呼び出しの最小化JavaScriptの処理は他のサービスと通信するよりかなり早い。Appsスクリプト内での処理はスプレッドシートやドキュメントやサイトや翻訳などなどを呼び出すよりずっと速い。なので、これらの他サービス呼び出しの最小化の方法を見つけられれば、スクリプトはずっと速く動く。バッチ処理の使用スクリプトはスプレッドシートからデータを読み、計算をし、結果を書き込む必要がある。Appsスクリプトは先読みを使って最適化する機能をすでに持っている。 キャッシュを使って、読み込み書き込みを最小化する最適化機能を最大限に生かしてスクリプトを書く事ができる。読み書きコマンドは遅い。スクリプトをスピードアップするために、配列に一回の命令で全てのデータを読み込み、配列のデータを使って様々な処理を行い、再び一回の命令でデータを書き込む。 例は次に示す。これは使うべきでない悪い例。スクリプトギャラリーにあるSpreadsheet Fractal Artは100 x 100 マスすべてに背景色をセットするために次のゴードを使ってる。 // このコードは使用してはならない。 遅くて、非効率なコードの例である。 このスクリプトは非効率的である。100行、100列のループを繰り返し、10000セルに絶え間なく書き込む。このときAppsスクリプトのライトバックキャッシュが働き,全てのラインの最後でデータをフラッシュする。キャッシュのお陰で、100回だけスプレッドシートを呼び出すだけですんでいる。 しかしコードは呼び出しをまとめることでもっと効率的になる。上を書きなおして、colorsという配列にセル範囲を読み込み、背景色処理は配列内のデータで行い、配列の値はスプレッドシートに書き込まれる。 // この例は使用してもOK 非効率的なコードは70秒ほどかかるのに対して、効率的なコードは一秒しかかからない。 フラクタルアートスクリプトをもし見てるなら、我々がちょっとばかりの変更を、例をわかりやすくするためにくわえてることに注意していただきたい。実際に公開されてるスクリプトは、setBackgroundRGBコールを使っていて、上記のようにsetBackgroundColorは使っていない。getColor_関数は次のように変更されている。 if (iteration == max_iteration) { スクリプトからEmailを送る二つのGoogle Apps Script チュートリアル スクリプトからメールの送り方 |