2012-05-08 20 views
14

私は1つのマスタースプレッドシートと複数のコピーを持っています。このマスタースプレッドシートはいくつかのスクリプトを使用します。複数のスプレッドシートに対して1つのスクリプトを作成することはできますか?

このマスタースプレッドシートのすべてのコピーを、マスタースプレッドシートと同じスクリプトにリンクすることはできますか?

目的:マスター・スプレッドシート内のスクリプトで

  • 変更は自動的に
  • 別名コピーで使用されている:低メンテナンスそれはあなたが考えているこの方法ではできません
+0

! – haemse

答えて

17

amleczkoは右です:あなたは、Google Appsのスクリプトで新しいライブラリ機能を使用する必要があります。

ただし、今日の時点では、(複数のスプレッドシートに同じスクリプトを使用して)必要なものを正確に行うことはできません。代わりに、ライブラリを作成するために、スクリプトのバージョンを保存します([ファイル]> [バージョンの管理...])。次に、このライブラリを他のスプレッドシートにインポートします([リソース]> [ライブラリの管理...])。 「開発モード」をオンにすると、ライブラリがすぐにこのライブラリを使用してスプレッドシートに反映されます。それ以外の場合は、変更ごとにライブラリの新しいバージョンを保存し、ライブラリを使用するすべてのスプレッドシートのライブラリのバージョン番号を手動で更新する必要があります。

問題は、あなたがこのようにスケルトン機能で、あなたのライブラリーを使用して、すべてのスプレッドシート内のスクリプトを記述する必要があり、次のとおりです。verry良い質問を:あなたは、このようなコメントを行うはずのallthough

function doSomething(){ 
    myLibrary.doSomething(); 
} 
+0

スクリプトをコピーして新しいスプレッドシートに貼り付けるほうが簡単です... –

+2

コピー貼り付けコードは、共有ライブラリの関数を作成するよりも簡単です...コード内で何かを変更する必要があるまで: ) – antoine

+0

私は実際にやり方を逆転しました。私は今、スクリプトとスケルトンファイルを持って、私はスケルトンファイルにシートを貼り付けます。スクリプトはそのことを行い、シートを削除します。コードを変更する必要がある場合は、すべて同じ場所にあります。幸いにも、私の場合、私はすでにスクリプトを実行していた何百もの過去のファイルについて心配する必要はありません。 –

1

。少なくとも、まだ(issue 40参照)。

ただし、スクリプトの使用状況に応じて、「難しい方法」またはそれ以上のものを接続したり、1つのスクリプトのみを使用したりすることもできます。マスタースプレッドシート上のスクリプトは、他のスプレッドシートファイルを開き、そのジョブを「リモート」で行うことができます。スプレッドシート上でスクリプトを操作して読み書きする必要はありません。スプレッドシートのイベントトリガーを使用する場合は、スプレッドシート上にホストされているスクリプトのみが必要です。つまり、オープン時、編集中、フォーム上での送信時です。

多分あなたはマスターシート上のスクリプトの素晴らしいUIを開発し、それをサービスとして公開することができます。その後、コピーには、別のブラウザタブで同じUIにアクセスするためのリンクしかありません。リンクにパラメータを追加することで、スクリプトUIは特定のスプレッドシートに適応することもできます。

これは私が今想像しているすべてのものです。しかし残念ながら、この素晴らしい "回避策"には合わないユースケースがいくつかあります。そのためには、issue 40(投票の一種にして更新を追跡する)にしか星をつけることはできず、すぐに開発されることを願っています。私は、このコンテキスト内の所定の位置に置くソリューションは、マスタースクリプトが埋め込まれているGoogleサイトを持っていることでした

+0

とにかく、設定を明確にする必要があります。各コピーには、onEditイベントと、その特定のスプレッドシートの何か(主に範囲のコピー)を行ういくつかのボタンがあります。私は、スクリプトの一部を更新する必要があることを知っています。これをどのようにして1つの場所から複数のコピーにするか(私は関連するスプレッドシートのすべてのキーのリストを持っています)。 –

+0

これを自動的に行うことはできません。手動で各スクリプトを開き、新しいコードを貼り付けて保存する必要があります。 UrlFetchを使用してリモートでコードを取得し、あなたに合った 'eval'をいくつかの回避策があります。問題は40号のコメントに記述されています。 –

+0

問題40は固定され、閉じられています。 –

0

、およびスプレッドシートは、あまりにも

次に埋め込まれ、スクリプト、専用のスプレッドシートに参照のうえ、ルッ​​クスGoogleサイトページの名前では、マスタースプレッドシートを調べ、ページに埋め込まれているスプレッドシートのIDを取得します。

0

スプレッドシートを自動生成するスクリプトを使用しているときにこの問題を解決しました。

通常、「情報」というスクリプトを使用してスプレッドシートにシートを追加します。私はそれをスクリプトに重要な情報を格納するために使用します。より多くのスプレッドシートを自動生成するスクリプトでは、作成したシートのIDを追跡しています。こうすることで、すぐに「リンクされた」シートをすべて呼び出すことができ、同じスクリプトを使ってそれらとやりとりすることができます。スクリプトを1枚のシートに書き、それをマスターシートまたはそれの子供と完全に分離しておく価値があるかもしれません。

この機能を見てみると、いくつかのアイデアが出てくるかもしれません。

SpreadsheetApp.openById(id)

関連する問題