2012-09-09 5 views
5

Kann der getRange verwendet werden, um einen benannten Bereich anstelle eines Bereichs zu haben?
Wenn ich es zu tun scheint, heißt es, das Argument muss eine Reichweite sein. Zum BeispielgetRange mit benannter Bereich Google Tabellenkalkulation mit Skripten

Statt:

 getRange("A4:E7"); 

Die Fläche A4:E7 wurde in einen benannten Bereich namens 'Namen' in sheet1 gemacht.

Könnten Sie vielleicht verwenden:

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

Oder gibt es eine andere Möglichkeit, es zu tun. Der vollständige Code ist:

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

Noch fest auf dieser - Ich bin mir nicht sicher, warum das Google-Skript die Verwendung des definierten Namens nicht erlaubt – user1658604

+0

Keine Antwort auf Ihr Problem, sondern nur ein Vorschlag: Sie brauchen nicht 'getActiveCell() '. Das Bearbeitungsereignis übergibt den bearbeiteten Bereich an das Skript, so dass Sie einfach 'event.range.getColumn()' verwenden können. – Tharkon

Antwort

10

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

Funktion Individuelle Rückkehr A1-Adresse des benannten Bereich:

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

Dann in einer Zelle in der Kalkulationstabelle:

=myGetRangeByName("Names") 

Diese würde setzen, was auch immer "Namen" in der Zelle definiert ist. Es wird NICHT aktualisiert, wenn Sie "Namen" wegen des aggressiven Caching von GAS neu definieren. Sie können GAS jedoch zwingen, es bei jeder Blattberechnung zu aktualisieren.

=myGetRangeByName("Names",now()) 

Das Javascript ignoriert den nicht verwendeten Parameter.

Der folgende Code tut, was ich denke, dass Sie beabsichtigen. Wenn die erste Spalte des Blattes bearbeitet wird, sortiert sie den Bereich basierend auf dieser Spalte.

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

Das wird nicht funktionieren, wenn Sie die Liste aus der Spalte A zu verschieben, weil getColumn() die absolute Spalte zurückgibt, nicht die Position der Zelle im Bereich. Sie müssten Code hinzufügen, um dies anzupassen.

+0

Was ist mit dem 'now()'? Ich legte es in ein Blatt und es war fehlerhaft. – jcollum

+0

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

+0

+1 für den Parameter now(), cool! – mTorres