如何使用 Google Apps 脚本针对大型数据集(10 万行和 10 列)优化此函数?

How to optimize this function for large dataset (100k rows & 10 cols) using Google Apps Script?

这个函数 运行 没问题,但最多 20k 行。我可以做些什么来让它 运行 变快?

const SOURCE_FILE_ID = 'ID';

function getData() {
  const sourceSheet = SpreadsheetApp.openById(SOURCE_FILE_ID);
  const sourceRng = sourceSheet.getSheetByName('ativcopiar').getRange(1, 1, sourceSheet.getLastRow(), 9);
  const sourceValues  = sourceRng.getValues();

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('Ativ.');
  var destinationRng = sheet.getRange(1, 1, sheet.getLastRow(), 9);
  destinationRng.clearContent();

  destinationRng.setValues(sourceValues);
}

有时会超过时间限制

欣赏任何光线! 谢谢

我相信你的目标如下。

  • 您想减少脚本的处理成本。

这样的话,使用表格API怎么样?使用Sheets API 时,可以稍微降低处理成本。 Ref 当你的脚本使用 Sheets API 时,它变成如下。

修改后的脚本:

在您使用此脚本之前,please enable Sheets API at Advanced Google services

function myFunction() {
  const SOURCE_FILE_ID = '###';
  const sheet = SpreadsheetApp.openById(SOURCE_FILE_ID).getSheetByName('ativcopiar');
  const dstSS = SpreadsheetApp.getActiveSpreadsheet();
  var dstSheet = dstSS.getSheetByName('Ativ.');
  var destinationRng = dstSheet.getRange(1, 1, dstSheet.getLastRow(), 9);
  destinationRng.clearContent();
  SpreadsheetApp.flush();
  const values = Sheets.Spreadsheets.Values.get(dstSS.getId(), "'ativcopiar'!A1:I" + sheet.getLastRow()).values;
  Sheets.Spreadsheets.Values.update({values}, dstSS.getId(), "Ativ.", {valueInputOption: "USER_ENTERED"});
}

参考文献: