0

私たちの組織では、内部アプリへのデータ入力として Google スプレッドシートを使用しています。スプレッドシートの変更プロセスを容易にするために、Google Apps Script を作成しました。

ご覧のとおり、このスクリプトはスプレッドシート形式に依存しており、私たちの組織にのみ適用される非常に特殊な用途を提供します。

私の質問は、それを使用しているすべてのスプレッドシート インスタンスに変更を自動的にプッシュする方法です。

スクリプトをスクリプト ギャラリーに追加できますが、これらの種類のスクリプトには適切な場所ではないと思います。また、マスター コピーへの変更がクライアントにプッシュされるかどうかについての情報も見つかりません。

私が見る他のオプションは、スクリプトを内部に含むスプレッドシート テンプレートを作成することですが、やはり、変更はプッシュされますか?

4

1 に答える 1

6

特定の (限定された) スクリプトを配布する最も簡単な方法は、スクリプトを含むテンプレート スプレッドシートを作成することです。ギャラリーは、スクリプトがより一般的で、誰でも使用できる場合に適しています。

現在、スクリプトのコピーに変更をプッシュする優れたソリューションはありません。スクリプトの配布方法に関係なく、最終的に各「インストール」は独立したコピーであり、元にリンクされていないためです。

これを行う最も簡単な方法は、ライブラリを使用することです。ライブラリ内にすべてのロジックを配置し、コピーされるスクリプト内にボイラープレートのみを配置します。つまり、onOpenandonEdit関数とスタブ メニュー関数です。このようなもの:

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つを開いたところです。

于 2013-06-08T13:16:04.780 に答える