0

最大 80 人のユーザーが自分のタイムシートで作業できるアプリケーション (タイムシート) をリリースしようとしています。現在、これらすべてのシートには、ユーザーがデータを入力するのをサポートする 2 つのスクリプト (onOpen と onEdit) が含まれています。

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

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

どんな考えでも大歓迎です。

ハインツ

4

1 に答える 1

1

これを行う簡単で標準的な方法はまだありません。問題 40が解決されたときに、それがはるかに簡単になることを願っています。スターを付けて、更新を追跡し、投票する必要があります。

さて、これにはいくつかの回避策があります。あなたに合う人がいる可能性があります。それらのいくつかは、問題 40 のコメントで説明されています。実際に読む必要があります。

1 つ目は「リモート コード フェッチ」です。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を使用するため)。すべて非常に不器用で、実際の解決策ではありません。しかし、今のところ、これですべてです。

于 2012-05-13T00:22:00.710 に答える