私はfirebaseデータベースからデータを取得し、Googleシート文書のデータを埋め込む次のコードを用意しました。 このプロセスには、1行あたり約1秒がかかり、1000行あります。Google Appsスクリプトが非常に遅く実行されます
私のコードはあまり効率的ではありませんか、Googleシートの行ごとに情報を記入するには良い方法がありますか?
function getAllData() {
var firebaseUrl = "url-here";
var base = FirebaseApp.getDatabaseByUrl(firebaseUrl);
var data = base.getData();
var iterator = 0
var obje = []
//Logger.log(data)
for(var i in data) {
iterator++;
if (iterator > 5) {
break
}
if (data[i] !== null) {
Logger.log(data[i]);
obje.push(data[i])
}
}
var range = SpreadsheetApp.getActiveSheet().getRange("A5:K5");
range.setBackground("red");
//Set Column Names
SpreadsheetApp.getActiveSheet().getRange('A5').setValue('Key');
SpreadsheetApp.getActiveSheet().getRange('B5').setValue('Time');
SpreadsheetApp.getActiveSheet().getRange('C5').setValue('Location');
SpreadsheetApp.getActiveSheet().getRange('D5').setValue('Participant_1');
SpreadsheetApp.getActiveSheet().getRange('E5').setValue('Participant_2');
SpreadsheetApp.getActiveSheet().getRange('F5').setValue('Category');
SpreadsheetApp.getActiveSheet().getRange('G5').setValue('team1Score');
SpreadsheetApp.getActiveSheet().getRange('H5').setValue('team2Score');
SpreadsheetApp.getActiveSheet().getRange('I5').setValue('gameDetails');
var number = 5
Logger.log(obje.length);
for (var i in obje) {
Logger.log('Hello' + i)
number++
if (i % 2 === 0) {
var range = SpreadsheetApp.getActiveSheet().getRange("A" + number + ":K" + number);
range.setBackground("lightblue");
}
else {
var range = SpreadsheetApp.getActiveSheet().getRange("A" + number + ":K" + number);
range.setBackground("lightgreen");
}
//Populate Row Data
SpreadsheetApp.getActiveSheet().getRange('A' + number).setValue(obje[i].Key);
SpreadsheetApp.getActiveSheet().getRange('B' + number).setValue(obje[i].Time);
SpreadsheetApp.getActiveSheet().getRange('C' + number).setValue(obje[i].Location);
SpreadsheetApp.getActiveSheet().getRange('D'+ number).setValue(obje[i].Participant_1);
SpreadsheetApp.getActiveSheet().getRange('E'+ number).setValue(obje[i].Participant_2);
SpreadsheetApp.getActiveSheet().getRange('F'+ number).setValue(obje[i].Category);
SpreadsheetApp.getActiveSheet().getRange('G'+ number).setValue(obje[i].team1Score);
SpreadsheetApp.getActiveSheet().getRange('H'+ number).setValue(obje[i].team2Score);
SpreadsheetApp.getActiveSheet().getRange('I'+ number).setValue(obje[i].gameDetails);
}
}
getRangeを呼び出すたびに、あなたのケースが読み込まれ、ファイルに書き戻されます。これらの呼び出しを最小限に抑える必要があります。 Googls Apps Scriptのブログ記事「[スプレッドシートの最適化]」(http://googleappsscript.blogspot.com/2010/06/optimizing-spreadsheet-operations.html) –