2012-09-09 10 views
5

È possibile utilizzare lo getRange per avere un intervallo denominato anziché un'area?
Quando mi sembra di farlo, dice che l'argomento deve essere un intervallo. Per esempio,getRange con intervallo denominato foglio di calcolo google utilizzando gli script

Invece di:

 getRange("A4:E7"); 

L'area di A4:E7 è stata fatta in un intervallo denominato denominato 'nomi' in sheet1.

Potrebbe forse usare:

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

O c'è un altro modo di farlo. Il codice completo è:

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

Ancora bloccato su questo - Non sono sicuro del motivo per cui lo script di Google non consente il nome definito da utilizzare – user1658604

+0

Non una risposta al tuo problema ma solo un suggerimento: non hai bisogno di 'getActiveCell()'. L'evento edit passa l'intervallo modificato allo script in modo da poter usare semplicemente 'event.range.getColumn()'. – Tharkon

risposta

10

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

funzione personalizzata restituire l'indirizzo A1 di intervallo denominato:

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

Poi, in una cella del foglio di calcolo:

=myGetRangeByName("Names") 

Questo metterebbe qualsiasi "Nomi" è definito come nella cella. NON si aggiornerà quando ridefinisci "Nomi", a causa del caching aggressivo di GAS. Tuttavia, puoi forzare GAS ad aggiornarlo su ogni calcolo del foglio.

=myGetRangeByName("Names",now()) 

Il javascript ignorerà il parametro non utilizzato.

Il seguente codice fa ciò che penso si intenda. Quando la prima colonna del foglio viene modificata, ordina l'intervallo in base a tale colonna.

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

questo non funzionerà se si sposta l'elenco off colonna A, perché getColumn() restituisce la colonna assoluta, non la posizione della cella dell'intervallo. Dovresti aggiungere del codice per adattarlo.

+0

Cosa significa 'ora()'? L'ho messo in un foglio e ha sbagliato. – jcollum

+0

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

+0

+1 per il parametro now(), cool! – mTorres

Problemi correlati