É possível fazer o ImportRange no Script do Google Apps?

Eu tenho brincado com o Script do Google Apps hoje e estou tentando codificar algumas funções de planilha personalizadas. Eu fiz algumas pesquisas, mas não consegui encontrar uma resposta para minha consulta.

Eu sei que em uma planilha do Google você pode usar ImportRange em uma célula em uma planilha como esta:

=ImportRange(spreadsheet_key;sheet!range_of_cells)

Minhas perguntas são: é possível fazer algo semelhante em um script do Google Apps? Em caso afirmativo, como?

Quero importar um intervalo de células de uma planilha em outra planilha (não uma planilha na planilha em que o script residirá).

0
adicionado
Visualizações: 1

3 Respostas

Eu precisava fazer isso recentemente. Isto é o que eu criei, simplesmente codificando a chave da planilha e colocando na função myImportRange do ahab

// to be used in the spreadsheet like so:  = myScriptedImportRange( GoogleClock() )
// no need to include key or range because they are in the script here
// 
// the third parameter - GoogleClock() - triggers an automatic update every minute.
// updated 2011-07-17 (ahab): better regex to strip sheetname of *outer* single quotes
// updated 2013-01-27 (ben) to hard-code key and range 
function myScriptedImportRange(  ) { 
 var key = "PUT YOUR DATA_SPREADSHEET_ID IN HERE"
 var sheetrange = "PUT YOUR SHEET AND CELL RANGE IN HERE"
 var shra = sheetrange.split("!") ;
 if (shra.length==1) shra[1]=shra[0], shra[0]="";  

 var sheetstring = shra[0].replace( /^'(.*)'$/g , "$1")//was: replace( /'/g , "") ; updated 2011-07-17 (ahab)
 var rangestring = shra[1] 

 var source = SpreadsheetApp.openById( key )    
 if ( sheetstring.length==0 ) sheet = source.getSheets()[0] ;
 else sheet = source.getSheetByName( sheetstring ) ;

 return  sheet.getRange( rangestring ).getValues(); 
}

In my case I have a set of private sheets, an intermediate sheet that uses the regular myImportRange and VMERGE with some SQL to combine selections from the private sheets into the intermediate sheet, and then a public sheet that simply has one cell containing = myScriptedImportRange( GoogleClock() )

Note that there is a similar approach here: https://stackoverflow.com/a/11857014

Note also that the ImportRange function and related functions often have a problem of not displaying the imported data when the origin workbook(s) is/are not open. A simple way around this has been described in a comment here: https://stackoverflow.com/a/11786797

0
adicionado
A função de relógio do Google não funciona mais no Novo Planilhas Google e não permite que você coloque a função alternativa "AGORA ()" na função principal da planilha. Apenas fica dizendo o carregamento e nada acontece.
adicionado o autor Courtney, fonte

Sim, isso é perfeitamente possível. Você só precisa chamar SpreadsheetApp.openById e, em seguida, obter a planilha e os intervalos desejados normalmente.

Por favor, dê uma olhada na documentação : range.getValues ​​() e range.setValues ​​() são métodos muito básicos de GAS e são bem descritos.

Leia também o tutorial .

0
adicionado
O que o GAS deveria significar?
adicionado o autor Marcel, fonte
Estou ciente dessas funções, mas não vejo como posso definir o intervalo na outra planilha. Talvez eu esteja apenas sendo idiota novamente.
adicionado o autor user1464409, fonte
Obrigado Serge e Henrique, vejo como fazer agora. Grande ajuda novamente.
adicionado o autor user1464409, fonte
Oi Serge, tomei a liberdade de editar sua resposta para resolver sua dúvida sobre o comentário :)
adicionado o autor Henrique G. Abreu, fonte
@ Henrique: obrigado pela 'edição', você está perfeitamente certo, eu ainda tenho algum progresso para fazer em algumas respostas de formatação e 'completude' eu vou cuidar disso ;-)
adicionado o autor Serge insas, fonte
Script do Google Apps
adicionado o autor Serge insas, fonte

Parece Google, em sua sabedoria infinita, alterou o comportamento do openById e funções semelhantes. Eles não são mais permitidos no contexto de funções personalizadas.

Consulte https://code.google.com/ p/google-apps-script-issues/problemas/detalhe? id = 5174 para mais detalhes.

Eles sugerem o uso de IMPORTRANGE como uma solução alternativa, mas como mencionado anteriormente, isso precisa ser chamado dentro de uma célula.

Nossa solução foi usar IMPORTRANGE na planilha e passar os dados adquiridos para nossa função personalizada, pois o conjunto de dados era pequeno. Eu espero que essa informação ajude!

0
adicionado