onOpenで実行されるスクリプトの承認ダイアログをスプレッドシート上に表示させたい

4,065 views
Skip to first unread message

masakih

unread,
Nov 8, 2013, 3:23:02 AM11/8/13
to google-app...@googlegroups.com
初歩的な質問で申し訳ありません。

スプレッドシートを開くと、下図のように自分の名前が自動的に記入されるスクリプトを考えています。
複数のユーザーが開くたび、それぞれの氏名が追記されます。














具体的には、ContactsAppサービスより姓名を取得してセルに記入するのですが、
スプレッドシートにメニューを追加して、そこから関数を起動する場合には、ContactsAppの承認ダイアログが
スプレッドシート上に表示されるのですが、onOpenの中で直接ContactAppを使用する場合、
スプレッドシートを開いただけでは実行されず、スクリプトエディタを開いてonOpenを実行しないと
承認ダイアログが表示されません。

これを、スプレッドシート開いた時点で承認ダイアログを表示させ、承認のボタンを押して実行させる、
つまり各ユーザーにわざわざスクリプトエディタを開かせたりセずに済む方法はありませんでしょうか?

このスプレッドシートを数百人のユーザーで利用したり、他のユーザーがコピーして別用途で利用したりするなど、
できるだけ単純明快な操作ですむようにしたいと考えております。

soundTricker

unread,
Nov 8, 2013, 5:02:55 AM11/8/13
to google-app...@googlegroups.com
こんにちは
大橋です。

まず今のところ、onOpenでSpreadsheet以外のサービスを認証なしで触ることはできず、まだ認証ダイアログを表示することもできません。

なので
  1. Scriptギャラリーに登録して、onInstallを呼び出す(そうすると出ます & ScriptギャラリーにあるGmail Meterはその方式です。)
  2. カスタムメニューを作成して、ユーザに起動してもらう
のいずれかの方式になります。
2.の方式でサンプルを作ってみたので見てみてください。

サンプル

コード





2013年11月8日金曜日 17時23分02秒 UTC+9 masakih:

masakih

unread,
Nov 8, 2013, 7:50:26 AM11/8/13
to google-app...@googlegroups.com
大橋様
いつも迅速なアドバイスありがとうございます!

そうですね。現実的には2のカスタムメニューを実行してもらうのがベストでしょうか。

ところが、最初のリンク先を見ながらいろいろ試してみたところ、
・onOpen関数を使うのではなく、init() など別の関数名を付けて、その関数を「スプレッドシートから」「起動時」のトリガーに登録する
 その際に承認ダイアログが表示されるので、承認する
この方法ですと、2人目以降は特に承認なしで起動時にContactsAppを含むスクリプトが自動実行されました。

また、元のスプレッドシートをコピーするとトリガーが外れてしまいますが、トリガーを登録しなおして承認すると、
そのシートを2人目以降が開いた場合も、承認なしで起動時のスクリプトが自動実行されました。


理屈は全く分からないのですが、もしこれが正しい動作であるならば、最初のシートを作るユーザーだけ
やり方を覚えてもらえば、そのシートに名前を書き込んでいく2人目以降のユーザーは承認せずにすみますので、
かなり運用しやすくなります。


ただし、試しに2人目以降のユーザーで起動時のスクリプトを承認なしで動かした後、スクリプトエディタを開いて
その関数を実行したところ、承認ダイアログが表示されました。
2人目以降のユーザーはContactsAppを許可していないように見えるのですが・・・
onOpenは操作者の権限で、ユーザーが登録したトリガーは登録者の権限で動く?ということでしょうか。

soundTricker

unread,
Nov 11, 2013, 4:57:38 AM11/11/13
to google-app...@googlegroups.com
うーん...
同じ方法で試したのですが、僕の方ではできないですね...
基本的にTriggerは利用しているユーザに対して付けられるもの(なので動く権限もTirggerを登録した人)なので
他の人がSpreadsheetを開いても動かないはずなのです。

ただonOpen等の特殊な関数だけはそれが可能にしています。


2013年11月8日金曜日 21時50分26秒 UTC+9 masakih:

masakih

unread,
Nov 12, 2013, 8:56:44 AM11/12/13
to google-app...@googlegroups.com
説明が下手ですみません・・
恐らく、ご教示いただいた通りの動作で間違いないと思われます。

  onOpenの場合・・・開いたユーザーで実行
  登録したトリガーの場合・・・トリガーを登録したユーザーで実行


これに対しまして、私が作りたかったスクリプトの動きは、

  onOpenの場合・・・最初のユーザーも、2人目以降のユーザーも、開いた際に自動実行されるスクリプトに対して承認が必要
  登録したトリガーの場合・・・最初のユーザーだけトリガー登録時に承認すれば、2人目以降のユーザーは承認不要で自動実行
                   (最初のユーザーの権限で実行される)

となり、後者の方法で十分運用可能になります。
(スクリプトはスプレッドシートオープン時に自動実行される分だけです。)


大変勉強になりました。ありがとうございました。


2013年11月11日月曜日 18時57分38秒 UTC+9 soundTricker:
Reply all
Reply to author
Forward
0 new messages