¿Es posible importar ImportRange en Google Apps Script?

He estado jugando con Google Apps Script hoy y estoy intentando codificar algunas funciones de hoja de cálculo personalizadas. He hecho algunas búsquedas pero no puedo encontrar una respuesta a mi consulta.

Sé que en una hoja de cálculo de Google puedes usar ImportRange en una celda en una hoja de cálculo como esta:

=ImportRange(spreadsheet_key;sheet!range_of_cells)

Mis preguntas son si es posible hacer algo similar en Google Apps Script y, de ser así, ¿cómo?

Quiero importar un rango de celdas de una hoja en otra hoja de cálculo (no una hoja en la hoja de cálculo donde residirá la secuencia de comandos).

0

3 Respuestas

Necesitaba hacer esto recientemente. Esto es lo que se me ocurrió, simplemente codificando la clave de la hoja de cálculo y el rango en la función myImportRange de 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
agregado
La función de reloj de Google ya no funciona en las Hojas de cálculo de Google y no le permite colocar la función alternativa "AHORA ()" en la función principal dentro de la hoja. Sigue diciendo carga y no pasa nada.
agregado el autor Courtney, fuente

Sí, esto es perfectamente posible. Solo necesita llamar a SpreadsheetApp.openById y luego obtener la hoja y los rangos deseados normalmente.

Mire la documentación : range.getValues ​​() y range.setValues ​​() son métodos GAS muy básicos y están muy bien descritos.

Lea el tutorial también.

0
agregado
¿Qué se supone que significa GAS?
agregado el autor Marcel, fuente
Soy consciente de estas funciones, pero no veo cómo puedo decirle que elija el rango de otra hoja de cálculo. Tal vez estoy siendo estúpido de nuevo.
agregado el autor user1464409, fuente
Gracias Serge y Henrique, veo cómo hacerlo ahora. Gran ayuda una vez más.
agregado el autor user1464409, fuente
Hola Serge, me tomé la libertad de editar tu respuesta para aclarar su duda sobre el comentario :)
agregado el autor Henrique G. Abreu, fuente
@Henrique: gracias por la 'edición', tienes toda la razón, todavía tengo que hacer algunos progresos en el formato de algunas respuestas y la 'integridad' Me ocuparé de eso ;-)
agregado el autor Serge insas, fuente
Google Apps Script
agregado el autor Serge insas, fuente

Parece que Google, en su infinita sabiduría, ha alterado el comportamiento de openById y funciones similares. Ya no están permitidos en el contexto de funciones personalizadas.

Consulte https://code.google.com/ p/google-apps-script-issues/issues/detail? id = 5174 para más detalles.

Sugieren usar IMPORTRANGE como una solución alternativa, pero como se mencionó anteriormente, debe llamarse dentro de una celda.

Nuestra solución fue utilizar IMPORTRANGE en la hoja y pasar los datos adquiridos a nuestra función personalizada, ya que el conjunto de datos era pequeño. ¡Espero que esta información ayude!

0
agregado