Como otimizar essa função para o grande conjunto de dados (100 k linhas e 10 colunas) utilizando o Script do Google Apps?

0

Pergunta

Esta função é executada ok, mas até 20k linhas. O que eu poderia mudar para fazê-lo funcionar rápido?

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

Às vezes, excede o limite de tempo.

Apreciar qualquer luz! Obrigado.

1

Melhor resposta

1

Eu acredito que seu objetivo é o seguinte.

  • Você quer reduzir os custos do processo, de seu script.

Neste caso, como sobre o uso de Folhas de API? Quando as Folhas API é utilizado, o processo de custo pode ser reduzido um pouco. Ref Quando as Folhas API é usada para seu script, ele torna-se como se segue.

Script modificado:

Antes de utilizar este script, por favor, habilite Folhas de API em Avançado serviços do 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"});
}

Referências:

2021-11-23 23:19:15

Tudo parece direito, mas ele está me dando um erro, dizendo que o nº de linhas no intervalo deve ser de pelo menos 1 para var destinationRng = dstSheet.getRange(1, 1, dstSheet.getLastRow(), 9);
Antonio Santos

@Antonio Santos Obrigado por responder. Peço desculpas pela inconveniência. Nesse caso, como a modificação de var destinationRng = dstSheet.getRange(1, 1, dstSheet.getLastRow(), 9) para var destinationRng = dstSheet.getRange(1, 1, dstSheet.getLastRow() || 1, 9);? E, modificando isso, por favor, teste novamente.
Tanaike

Muito obrigado!
Antonio Santos

Na realidade, eu tenho testado com precisão apenas agora. Eu tinha marcado como certo, sabendo que você ace em suas respostas. No entanto, para que isso funcione, você tem que mudar const values = Sheets.Spreadsheets.Values.get(dstSS.getId(), "'ativcopiar'!A1:I" + sheet.getLastRow()).values; para const values = Sheets.Spreadsheets.Values.get(SOURCE_FILE_ID, "'ativcopiar'!A1:I" + sheet.getLastRow()).values; Obrigado por sempre ajudar a comunidade!
Antonio Santos

@Antonio Santos Obrigado por responder. Eu estou feliz que seu problema foi resolvido. Obrigado, também.
Tanaike

Em outros idiomas

Esta página está em outros idiomas

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