2017-11-22 6 views
2

いくつかの文脈は、Googleスプレッドシートがどの私は、それぞれが表す30枚のシートがあります</li> <li>翻訳者を招待するのに、私は私のWebアプリの翻訳を管理する時間がかかりすぎる

  • アプリスクリプトで範囲を守りますアプリの一部(大きなアプリ)。
  • 各シートには14列あり、1列/言語です。
  • 私はすでに二回誤って間違った列を編集翻訳者との問題を抱えていたとして、私は唯一の彼の列に、各翻訳者のための版を制限し protected columnsを設定したい私は

    をやりたい

言語(スプレッドシートへのアクセスが許可されている1通の翻訳者= 1の電子メールアドレス)。私はそれを手動で設定し、それを

をどうやっ

痛み(繰り返し作業)は、翻訳者の変更場合は、再度実行する必要があります。だから私はそれのためのスクリプトを書いた。

私が保存されたどのようなアクセス許可:

var ProtectionsDefinitions = [{ 
    langHeader: "en", 
    emails: ["[email protected]"] 
},{ 
    langHeader: "fr", 
    emails: ["[email protected]"] 
} 
...] 

擬似コード:それは満足していないのはなぜ

function setProtection(range, rangeDesc, emails) { 
    // range = class range 
    // rangeDesc = string (description for protected range) 
    // emails = [[email protected], [email protected]] 

    var protection = range.protect(); // Creates an object that can protect the range from being edited except by users who have permission. 
            // Until the script actually changes the list of editors for the range 
            // the permissions mirror those of the spreadsheet itself, which effectively means that the range remains unprotected. 
    protection.removeEditors(protection.getEditors()); // this takes more than 1s ! 
    protection.setDomainEdit(true); // all users in the domain that owns the spreadsheet have permission to edit the protected range 
    protection.setDescription(rangeDesc); 
    if(emails.length > 0){ 
    // this takes more than 1s !! 
    range.getSheet().getParent().addEditors(emails); // give the users permission to edit the spreadsheet itself, required for protection.addEditors() 
    protection.addEditors(emails); // give the users permission to edit the protected range 
    } 
} 

:実際の作業を行う関数の

For every sheet: 
    For every language: 
     Protect the column whose header match the langHeader 

実際のコード

  • 機能setProtection私は保護する30枚* 14列= 420の範囲を有する
  • を保護するために、各範囲について2Sをとります。
  • 全体の実行が

は、私は、関数内のコメントを参照のロギングツールに時間のおかげで多くを取るラインをトレースしたスクリプト(〜6分)をアプリGoogleが許可された最大時間を超えています。

私はそれが動作するように何かをすることができますか?

例スプレッドシート

答えて

1

あなたは仕事を分割し、Early Access Programかではなく、プロセスに1つのスクリプトの呼び出しを持つすべてのシート/列を適用することができます。ソリューションの

アイデア:

関連Q &トリガーを言及するためにも、アーリーアクセスプログラム(それについて知らなかった)と感謝を言及するため

+0

感謝溶液。 [この回答](https://stackoverflow.com/a/43587255/1570104)は、トリガソリューションを実装するための最小限の方法を提供するようです。私のユースケースでは、私はちょうど3つのチャンクでジョブを分割し、トリガーを実装すると、最適化オーバーのように見えるが、それが私の問題を解決する方法を理解することは非常に面白かったと思う。 – edelans

関連する問題