A cópia do script de dados não está mais funcionando

Nov 25 2020

Tenho usado um script na minha planilha do google que encontrei aqui:

copie dados de uma planilha para outra no google app script e acrescente uma linha, um pequeno problema

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var copySheet = ss.getSheetByName("Copy");
  var pasteSheet = ss.getSheetByName("Paste");

  // get source range
  var source = copySheet.getRange(2,2,12,2);
  // get destination range
  var destination = pasteSheet.getRange(pasteSheet.getLastRow()+1,2,12,2);

  // copy values to destination range
  source.copyTo(destination);

  // clear source values
  source.clearContent();
}

Quando estou executando agora, ocorre um erro:

As coordenadas do intervalo alvo estão fora das dimensões da folha.

que não estava acontecendo antes. Alguém tem uma ideia do por que está fazendo isso?

Respostas

1 Marios Nov 25 2020 at 18:31

Questão:

O erro está nesta linha:

var destination = pasteSheet.getRange(pasteSheet.getLastRow()+1,2,12,2);

pasteSheet.getLastRow()retorna um número de linha que está na parte inferior da planilha. Então, você considera o 12intervalo de linhas, mas pasteSheetnão possui 12linhas após a última linha com conteúdo.

Soluções:

Adicione mais linhas no pasteSheet:

ou você pode usar insertRowsAfter :

pasteSheet.insertRowsAfter(pasteSheet.getLastRow(), 12)

Fragmento de código:

function myFunction() {
   var ss = SpreadsheetApp.getActiveSpreadsheet();
  var copySheet = ss.getSheetByName("Copy");
  var pasteSheet = ss.getSheetByName("Paste");

  // get source range
  var source = copySheet.getRange(2,2,12,2);
  // insert rows to make sure you have enough space
  pasteSheet.insertRowsAfter(pasteSheet.getLastRow(), 12)
  // get destination range
  var destination = pasteSheet.getRange(pasteSheet.getLastRow()+1,2,12,2);
   
  // copy values to destination range
  source.copyTo(destination);

  // clear source values
  source.clearContent();
}