2017-12-04 1 views
0

私は、時間ベースのトリガーでApp Scriptを介してAPIからデータを取り出すスプレッドシートを持っています。 (何千人ものユーザーが使用しています)。このスクリプトは非常にシンプルで、UrlFetchApp.fetch()を介してデータをフェッチしてスプレッドシートに格納し、スプレッドシートを最初にコピーした後に時間ベースのトリガーを設定するための関数を備えていますコピーする)。Google Apps Script - アプリが検証されない、@OnlyCurrentDocが大量のスクリプトを遅くする

数ヶ月前から、コピーを作成したユーザーは、App Scriptの実行を許可するときに「このアプリは検証されません」という画面が表示されます。これはGoogleがセキュリティを変更したことによるものだと理解していますが、確認されていないステータスを適切に取り除く方法はわかりません。これは私が試したものです:

  1. 私のプロジェクトを開発者として確認してください。これはうまくいかなかった。なぜなら、人々がスプレッドシートのコピーを作ったとき、それは彼ら自身が所有する新しいプロジェクトであり、当然他のユーザーがプロジェクトをコピーして作成したときにそのプロジェクトを確認していないからだ。
  2. @OnlyCurrentDocをスプレッドシートの上部に追加します。これは技術的には機能しますが、@OnlyCurrentDocを追加するだけで、スクリプトの実行時間が4秒から180秒になります。

スプレッドシートのコピーがhttps://wowaudit.com/copyで行うことができ、これは「未確認のApp」メッセージをトリガして、コメントを追加し@OnlyCurrentDocスニペットで実行するので、多くの時間がかかり、スクリプトのコードです:

/** 
* @OnlyCurrentDoc 
*/ 

function CreateTrigger() { 
    // First delete old triggers 
    var allTriggers = ScriptApp.getProjectTriggers(); 
    for (var i = 0; i < allTriggers.length; i++) { 
    ScriptApp.deleteTrigger(allTriggers[i]); 
    } 

    // Then create new triggers 
    var sheet = SpreadsheetApp.getActiveSpreadsheet(); 
    var interval = sheet.getRange("RefreshSetting").getValue().slice(0,2); 
    ScriptApp.newTrigger("Fetch").timeBased().everyMinutes(interval).create(); 
    ScriptApp.newTrigger("Refresh").forSpreadsheet(sheet).onEdit().create(); 

    // Then give user feedback of success 
    if (ScriptApp.getProjectTriggers().length == 2) { 
    sheet.getRange('Settings!B24').setValue('The sheet is automatically refreshing!'); 
    sheet.getRange('Settings!B24').setBackground('#b6d7a8'); 
    } else { 
    sheet.getRange('Settings!B24').setValue('Click here to start automatic refreshing!'); 
    sheet.getRange('Settings!B24').setBackground('#ea9999'); 
    } 
} 

「Unverified App」メッセージが私のシナリオに表示されないようにする方法、または@OnlyCurrentDocフラグがスクリプトを非常に遅くする(基本的には使えなくする)のはなぜですか?

ありがとうございました!

答えて

関連する問題