Jak k optimalizaci této funkce pro velké datové sady (100k řádků a 10 sloupců) pomocí Google Apps Script?

0

Otázka

Tato funkce pracuje ok, ale až na 20k řádky. Co můžu změnit, aby to běžet rychle?

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

Někdy to překročí časový limit.

Ocenil nějaké světlo! Díky.

1

Nejlepší odpověď

1

Věřím, že vaším úkolem je následující.

  • Chcete snížit náklady proces skriptu.

V tomto případě, jak se o použití Listů API? Když Listy API je používán, proces, náklady mohou být sníženy trochu. Ref Když Listy API se používá pro svůj scénář, to se stane takto.

Upravený skript:

Předtím, než můžete použít tento skript, prosím, povolte Listy API na Pokročilé služby 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"});
}

Odkazy:

2021-11-23 23:19:15

To všechno se zdá v pořádku, ale to mi dává chybu, říká, že nº řádků v rozsahu, musí být alespoň 1 pro var destinationRng = dstSheet.getRange(1, 1, dstSheet.getLastRow(), 9);
Antonio Santos

@Antonio Santos Děkuji za odpověď. Omlouvám se za nepříjemnosti. V tomto případě, jak o úpravách var destinationRng = dstSheet.getRange(1, 1, dstSheet.getLastRow(), 9) k var destinationRng = dstSheet.getRange(1, 1, dstSheet.getLastRow() || 1, 9);? A tím, že mění to, prosím, vyzkoušet si to znovu.
Tanaike

Děkuji moc!!!
Antonio Santos

Jsem vlastně zkouší přesně teď. Měl jsem označeno jako správné, vědět, že eso ve své odpovědi. Nicméně, pro tuto práci, budete muset změnit const values = Sheets.Spreadsheets.Values.get(dstSS.getId(), "'ativcopiar'!A1:I" + sheet.getLastRow()).values; pro const values = Sheets.Spreadsheets.Values.get(SOURCE_FILE_ID, "'ativcopiar'!A1:I" + sheet.getLastRow()).values; Děkujeme, že jste vždy pomáhá komunitě!
Antonio Santos

@Antonio Santos Děkuji za odpověď. Jsem rád, že váš problém byl vyřešen. Děkuji, taky.
Tanaike

V jiných jazycích

Tato stránka je v jiných jazycích

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