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);

最后调用一次保存操作可以为您节省所有往返时间,因此这应该会大大加快您的代码并在超过最大执行时间之前完成。

于 2013-02-11T13:01:01.337 回答