大橋様
いつも迅速なアドバイスありがとうございます!
そうですね。現実的には2のカスタムメニューを実行してもらうのがベストでしょうか。
ところが、最初のリンク先を見ながらいろいろ試してみたところ、
・onOpen関数を使うのではなく、init() など別の関数名を付けて、その関数を「スプレッドシートから」「起動時」のトリガーに登録する
その際に承認ダイアログが表示されるので、承認する
この方法ですと、2人目以降は特に承認なしで起動時にContactsAppを含むスクリプトが自動実行されました。
また、元のスプレッドシートをコピーするとトリガーが外れてしまいますが、トリガーを登録しなおして承認すると、
そのシートを2人目以降が開いた場合も、承認なしで起動時のスクリプトが自動実行されました。
理屈は全く分からないのですが、もしこれが正しい動作であるならば、最初のシートを作るユーザーだけ
やり方を覚えてもらえば、そのシートに名前を書き込んでいく2人目以降のユーザーは承認せずにすみますので、
かなり運用しやすくなります。
ただし、試しに2人目以降のユーザーで起動時のスクリプトを承認なしで動かした後、スクリプトエディタを開いて
その関数を実行したところ、承認ダイアログが表示されました。
2人目以降のユーザーはContactsAppを許可していないように見えるのですが・・・
onOpenは操作者の権限で、ユーザーが登録したトリガーは登録者の権限で動く?ということでしょうか。