4

スプレッドシートのコンテンツをscriptDBにロードしているスクリプトがありますが、スプレッドシートには約15,000行、9列があり、「最大実行時間を超えました」というエラーが表示され続けます。

Googleのドキュメントに記載されている関数を使用してデータを読み込みます。

function loadDatabaseFromSheet() {
  var spreadsheet = SpreadsheetApp.openById(SPREADSHEET_KEY);
  var sheet = spreadsheet.getActiveSheet();
  var columns = spreadsheet.getLastColumn();
  var data = sheet.getDataRange().getValues();
  var keys = data[0];
  var db = ScriptDb.getMyDb();
  for (var row = 1; row < data.length; row++) {
    var rowData = data[row];
    var item = {};
    for (var column = 0; column < keys.length; column++) {
      item[keys[column]] = rowData[column];
    }
    db.save(item);
  }
}

物事をスピードアップする方法はありますか、それとも数千のチャンクに分割する必要がありますか?

4

1 に答える 1

4

db.save(item)15000回の呼び出しが速度低下の原因です。大量のデータを保存する場合は 、代わりに一括操作を使用してください。

  var db = ScriptDb.getMyDb();
  var items = [];
  for (var row = 1; row < data.length; row++) {
    var rowData = data[row];
    var item = {};
    for (var column = 0; column < keys.length; column++) {
      item[keys[column]] = rowData[column];
    }
    items.push(item);
  }
  db.saveBatch(items,false);

保存操作を最後に 1 回呼び出すと、すべての往復時間が節約されるため、コードが大幅に高速化され、最大実行時間を超える前に終了するはずです。

于 2013-02-11T13:01:01.337 に答える