2012-06-21 48 views
5

He estado jugando con Google Apps Script hoy y estoy tratando de codificar algunas funciones personalizadas de la hoja de cálculo. He hecho algunas búsquedas pero no puedo encontrar una respuesta a mi consulta.¿Es posible importar ImportRange en Google Apps Script?

sé que en una hoja de cálculo de Google puede utilizar ImportRange en una celda en una hoja de cálculo como esta:

=ImportRange(spreadsheet_key;sheet!range_of_cells) 

Mis preguntas son ¿es posible hacer algo similar en una Apps Script Google y si es 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).

Respuesta

5

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

Por favor, eche un vistazo a documentation: y range.setValues() son métodos muy básicos de GAS y están muy bien descritos.

Lea the tutorial también.

+0

Conozco 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. – user1464409

+1

Hola Serge, me tomé la libertad de editar tu respuesta para abordar su duda sobre el comentario :) –

+0

@Henrique: gracias por la 'edición', tienes toda la razón, todavía tengo algo de progreso que hacer en el formato de algunas respuestas y 'Completitud' Me ocuparé de eso ;-) –

1

Necesitaba hacer esto recientemente. Esto es lo que me ocurrió, simplemente difíciles de codificar la clave de hoja de cálculo y el rango en función de Acab myImportRange

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

En mi caso tengo un conjunto de hojas privados, una lámina intermedia que utiliza el normal myImportRange y VMERGE con algunos de SQL para combinar selecciones de las hojas privados en la lámina intermedia, y luego una hoja público que simplemente tiene una celda que contiene = myScriptedImportRange(GoogleClock())

tenga en cuenta que hay un enfoque similar aquí: https://stackoverflow.com/a/11857014

tenga en cuenta también que elLa funcióny las funciones relacionadas a menudo tienen el problema de no mostrar los datos importados cuando el/los libro (s) de trabajo de origen no están abiertos. Se ha descrito una forma sencilla de resolver esto en un comentario aquí: https://stackoverflow.com/a/11786797

+0

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. – Courtney

2

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.

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

Sugieren usar IMPORTRANGE como una solución, pero como se mencionó anteriormente, se debe llamar 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!

Cuestiones relacionadas