2012-05-12 5 views
0

私は自分のタイムシートで最大80人のユーザーが共有するアプリケーション(タイムシート)を公開しようとしています。これらのシートには、現在、ユーザーがデータを入力するのをサポートする2つのスクリプト(onOpenおよびonEdit)が含まれています。大量のスプレッドシートにスクリプトを最適に維持するにはどうすればよいですか?

私の心配は、ある時点でスクリプトを変更する必要がある場合、80個のスクリプトをすべて更新することです。

これを行う方法がベストプラクティスですか?そのために「サービスとして公開」機能を使用できますか?はいの場合、80種類のスプレッドシートでこのサービスをどのように適用できますか?

何でも歓迎します。

ハインツ

答えて

1

まだこれを行うには簡単な、標準的な方法はありません。 issue 40が解決されるともっと簡単になることを願っています。あなたはそれのための更新と投票の種類を追跡するためにそれをスターにする必要があります。

ここではいくつかの回避策があります。あなたに合った可能性もあります。それらのうちのいくつかはissue 40のコメントに記載されています、あなたは本当にそれを読むべきです。

最初のコードは "リモートコードフェッチ"です。 80個のスクリプトのそれぞれに、リモートで実行されるコードをフェッチするスケルトンスクリプトだけがあります。 「マザー」スプレッドシートのセル、またはスクリプトから簡単にアクセスできる場所に格納されている可能性があります。次に例を示します。

var sourceScript = 'url-to-your-script-file-hosted-anywhere'; 

function onEdit() { 
    eval(UrlFetchApp.fetch(sourceScript).getContentText()); 
    onEditImpl(); //this function is declared on the imported script 
} 

function onOpen() { 
    eval(UrlFetchApp.fetch(sourceScript).getContentText()); 
    onOpenImpl(); //this function is declared on the imported script 
} 

//only hold the API calls that you may do on the imported script 
//so there's a nice authorization popup for the user 
function stub() { 
    return; 
    SpreadsheetApp.openById('').getRange('').setValue(''); 
    CalendarApp.getCalendarById('').createAllDayEvent('', null); 
    SitesApp.getSite(''); //and so on... 
    //add/remove all services you'll use here in the stub 
    //more is better, in case you decide the script have to something new 
    //you don't have to go and edit each script manually :) 
} 

別の可能な回避策は、その中にスクリプトを使って、「テンプレート」スプレッドシートを持つことです。そのため、80個のスプレッドシートをすべてコピーして(更新されたスクリプトを使用して)、各ファイルの値と権限を新しいものにコピーすることができます。このアプローチの欠点は、ファイルへのすべてのリンクが変更されることです。ファイル、コメント、フォルダーなどの各ユーザー設定は失われます。しかし、あなたの使用状況に応じて、ファイルへのアクセス方法(例: Googleアカウントを持っていない場合もありますが、あなたのサイトにあるリンクを持っている人なら誰でも共有できます。私はシナリオを知らない、それはあなたに合うかもしれません。

これは、あなたが(onOpenとonEditを使用するための)制限で考えることができます。すべての非常に不器用で実際の解決策ではありません。しかし、今のところ、それがすべてです。

+0

こんにちはエンリケ、 私はあなたのアイデアのように実行します。 関数のonEdit(){ にeval(UrlFetchApp.fetch(sourceScript).getContentText()); onEditImpl(); ; //この関数はインポートされたスクリプトで宣言されています しかし、これはかなり遅いと思います。それじゃない?私はonEdit()スクリプトを使用して、ユーザーがデータを入力するのをサポートし、データ入力エラーを制御するので、応答はかなり速くなければなりません。とにかくありがとうございます。 Heinz – ruffieux

+0

スクリプトのプロパティ、キャッシュサービス、隠しセルなどのように、ローカルにコードを「キャッシュ」して、それを更新する(または期限切れにする)機能がいくつかあります。とにかく、常にオーバーヘッドがあります。そこに直接コードと比較されるものはありません。しかしIMHO、onEditは決して "かなり速い"ものではありませんが、それは当然遅いです。私はあなたが試してみて、あなたのユースケースでこの違いが本当に問題になるかどうかを見てみましょう。しかし再び、これは本当の解決策ではなく、多くの妥協点を伴う回避策です。 –

+0

UrlFetchAppはonOpen \ onEditのコンテキストで使用できますか?私の実験やあなたからの回答は、http://productforums.google.com/forum/#!topic/apps-script/MFHOXuSFK_0%5B1-25%5Dではないようです。私が間違っている場合は教えてください。 – user1525598

関連する問題