私は、時間ベースのトリガーでApp Scriptを介してAPIからデータを取り出すスプレッドシートを持っています。 (何千人ものユーザーが使用しています)。このスクリプトは非常にシンプルで、UrlFetchApp.fetch()を介してデータをフェッチしてスプレッドシートに格納し、スプレッドシートを最初にコピーした後に時間ベースのトリガーを設定するための関数を備えていますコピーする)。Google Apps Script - アプリが検証されない、@OnlyCurrentDocが大量のスクリプトを遅くする
数ヶ月前から、コピーを作成したユーザーは、App Scriptの実行を許可するときに「このアプリは検証されません」という画面が表示されます。これはGoogleがセキュリティを変更したことによるものだと理解していますが、確認されていないステータスを適切に取り除く方法はわかりません。これは私が試したものです:
- 私のプロジェクトを開発者として確認してください。これはうまくいかなかった。なぜなら、人々がスプレッドシートのコピーを作ったとき、それは彼ら自身が所有する新しいプロジェクトであり、当然他のユーザーがプロジェクトをコピーして作成したときにそのプロジェクトを確認していないからだ。
@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
フラグがスクリプトを非常に遅くする(基本的には使えなくする)のはなぜですか?
ありがとうございました!