Cum de a optimiza această funcție pentru set de date de mare (100k rânduri și 10 coloane) folosind Google Apps Script?

0

Problema

Această funcție ruleaza ok, dar pentru până la 20 de mii de rânduri. Ce as putea schimba, pentru a face alerga mai repede?

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

Uneori, depășește limita de timp.

Apreciez orice lumină! Multumesc.

1

Cel mai bun răspuns

1

Cred ca scopul este după cum urmează.

  • Vrei pentru a reduce costul procesului de script.

În acest caz, cum despre utilizarea Foi API? Când Foile API este folosit, procesul costul poate fi redus un pic. Ref Când Foi API este folosit pentru scenariu, devine, după cum urmează.

Modificat script-ul:

Înainte de a folosi acest script, vă rugăm să activați Foi API Avansat la serviciile Google.

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

Referințe:

2021-11-23 23:19:15

Totul pare corect, dar imi da o eroare, spunând că nº de rânduri, în intervalul trebuie să fie de cel puțin 1 pentru var destinationRng = dstSheet.getRange(1, 1, dstSheet.getLastRow(), 9);
Antonio Santos

@Antonio Santos Mulțumesc pentru răspuns. Îmi cer scuze pentru neplăcerile create. În acest caz, cât despre modificarea var destinationRng = dstSheet.getRange(1, 1, dstSheet.getLastRow(), 9) pentru a var destinationRng = dstSheet.getRange(1, 1, dstSheet.getLastRow() || 1, 9);? Și, prin modificarea aceasta, vă rugăm să testați din nou.
Tanaike

Vă mulțumesc foarte mult!
Antonio Santos

Am testat cu acuratețe doar acum. Am marcat la fel de drept, știind că ace în răspunsurile dumneavoastră. Cu toate acestea, pentru ca aceasta să funcționeze, ar trebui să se schimbe const values = Sheets.Spreadsheets.Values.get(dstSS.getId(), "'ativcopiar'!A1:I" + sheet.getLastRow()).values; pentru const values = Sheets.Spreadsheets.Values.get(SOURCE_FILE_ID, "'ativcopiar'!A1:I" + sheet.getLastRow()).values; Vă mulțumesc pentru că mereu a ajuta comunitatea!
Antonio Santos

@Antonio Santos Mulțumesc pentru răspuns. Mă bucur că problema a fost rezolvată. Mulțumesc, de asemenea.
Tanaike

În alte limbi

Această pagină este în alte limbi

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................