google-apps-script - dashboards - dashboard in google spreadsheets
¿Es posible importar ImportRange en Google Apps Script? (3)
Sí, esto es perfectamente posible. Solo necesita llamar a SpreadsheetApp.openById
y luego obtener la hoja y los rangos deseados normalmente.
Por favor, eche un vistazo a 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.
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).
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 obtener 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!
Necesitaba hacer esto recientemente. Esto es lo que se me ocurrió, simplemente codificando la clave de la hoja de cálculo y el alcance 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();
}
En mi caso, tengo un conjunto de hojas privadas, una hoja intermedia que usa el myImportRange
regular y VMERGE con algunas SQL para combinar selecciones de las hojas privadas en la hoja intermedia, y luego una hoja pública que simplemente tiene una celda que contiene = myScriptedImportRange( GoogleClock() )
Tenga en cuenta que hay un enfoque similar aquí: https://.com/a/11857014
Tenga en cuenta también que la función ImportRange
y las funciones relacionadas a menudo tienen un 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 solucionar este problema en un comentario aquí: https://.com/a/11786797