2012-09-09 91 views
5

¿Se puede usar el getRange para tener un rango con nombre en lugar de un área?
Cuando parece que lo hago, dice que el argumento debe ser un rango. Por ejemplo,getRange con rango de nombre hoja de cálculo de google usando scripts

En lugar de:

 getRange("A4:E7"); 

El área de A4:E7 se ha hecho en un rango con nombre llamado 'nombres' en sheet1.

Podría tal vez usar:

var tableRange = SpreadsheetApp.getActiveSpreadsheet();.getRangeByName("Names"); 
getRange(tableRange); 

O hay alguna otra manera de hacerlo. El código completo es:

function onEdit(event){ 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var editedCell = ss.getActiveCell(); 

    var columnToSortBy = 1; 
    var tableRange = ss.getRangeByName("Names"); 

    if(editedCell.getColumn() == columnToSortBy){ 
     var range = ss.getRange(tableRange); 
     range.sort({ column : columnToSortBy }); 
    } 
} 
+0

Todavía estoy atascado en esto - No estoy seguro de por qué la secuencia de comandos de google no permite usar el nombre definido – user1658604

+0

No es una respuesta a su problema sino solo una sugerencia: No necesita 'getActiveCell()'. El evento de edición pasa el rango editado a la secuencia de comandos para que pueda usar 'event.range.getColumn()'. – Tharkon

Respuesta

10

https://developers.google.com/apps-script/class_spreadsheet#getRangeByName

función Personal devolver dirección A1 del rango con nombre:

function myGetRangeByName(n) { // just a wrapper 
    return SpreadsheetApp.getActiveSpreadsheet().getRangeByName(n).getA1Notation(); 
} 

Luego, en una celda de la hoja de cálculo:

=myGetRangeByName("Names") 

Este pondría cualquier "Nombre" definido en la celda. NO se actualizará cuando redefina "Names", debido al almacenamiento en caché agresivo de GAS. Sin embargo, puede forzar a GAS a actualizarlo en cada cálculo de hoja.

=myGetRangeByName("Names",now()) 

El javascript ignorará el parámetro no utilizado.

El siguiente código hace lo que creo que tiene la intención. Cuando se edita la primera columna de la hoja, ordena el rango en función de esa columna.

function onEdit(e) { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var editedCell = ss.getActiveCell(); 
    var columnToSortBy = 1; 
    var tableRange = ss.getRangeByName("Names"); 
    if (editedCell.getColumn() == columnToSortBy) { 
    tableRange.sort(columnToSortBy); 
    } 
} 

esto no funcionará si se mueve fuera de la lista de la columna A, porque getColumn() devuelve la columna absoluta, no la ubicación de la celda del rango. Tendría que agregar código para ajustarse a eso.

+0

¿Qué pasa con 'now()'? Lo puse en una hoja y se produjo un error. – jcollum

+0

https://support.google.com/drive/bin/static.py?hl=es&topic=25273&page=table.cs&tab=1240285 – HardScale

+0

+1 para el parámetro now(), genial! – mTorres

Cuestiones relacionadas