特定の (限定された) スクリプトを配布する最も簡単な方法は、スクリプトを含むテンプレート スプレッドシートを作成することです。ギャラリーは、スクリプトがより一般的で、誰でも使用できる場合に適しています。
現在、スクリプトのコピーに変更をプッシュする優れたソリューションはありません。スクリプトの配布方法に関係なく、最終的に各「インストール」は独立したコピーであり、元にリンクされていないためです。
これを行う最も簡単な方法は、ライブラリを使用することです。ライブラリ内にすべてのロジックを配置し、コピーされるスクリプト内にボイラープレートのみを配置します。つまり、onOpen
andonEdit
関数とスタブ メニュー関数です。このようなもの:
function onOpen(e) { return Lib.onOpen(e); }
function onEdit(e) { return Lib.onEdit(e); }
function stub1() { return Lib.stub1(); }
function stub2() { return Lib.stub2(); }
//etc... as many as you need, than a couple more for future growth
Lib
この分散スクリプトは、すべてのロジックを持つマスター スクリプト ( ) をインポートします。例えば
function onOpen(e) {
e.source.addMenu('Custom Menu', [{name:'Do something', functionName:'stub1'}]);
}
function onEdit(e) {
;//something
}
function stub1() {
Browser.msgBox('Example');
}
現在、Lib を更新するときに、スクリプトを含むすべてのドキュメントのスクリプト エディター内に移動し、ライブラリのバージョンを手動で更新する必要があるという問題がまだ残っています。
onOpen
関数をチェックしてScriptProperty
(バージョンを更新せずに手動で簡単に変更できる)、スクリプトを更新する必要があることをユーザーに通知する (つまり、スクリプト エディターに入って、ライブラリのバージョンを更新する) など、手の込んだことを行うこともできます。
ライブラリをインポートするときに設定できる開発モード フラグがあります。これにより、ライブラリのバージョンにアクセスして更新する必要がなくなります。ただし、スクリプトを実行しているユーザーがインポートされたライブラリの開発者である場合にのみ機能します。つまり、自分以外のユーザーがいる場合は、編集権限を与えてライブラリを共有する必要があります。すべてがあなたのドメインの下または友人の間である場合、これはあなたにとって受け入れられるかもしれません. しかし、それは本当に明確な解決策ではありません。
個人的にはあまり好きではありませんが、あなたのためにトリックを行うかもしれない別の可能な回避策は、を使用することeval
です。「ロジック」コードを Google ドキュメントまたは他の場所に保存し、スクリプトで取得してeval
から関数を実行できます。各スクリプトには定型コードが必要ですが、ユーザーは更新されたコードを取得するために何もする必要はありません。また、Apps Script で使用するすべてのサービスへのスタブ呼び出しを分散スクリプト内に追加する必要があります。これにより、必要なすべての承認がユーザーに表示されるようになります。
最後に、これに何らかの形で関連するいくつかの 問題がApps Script イシュー トラッカーで公開されています。それらに「スター」を付けて、更新を受け取り、それらに投票する必要があります。私はこれのために特別に1つを開いたところです。