2012-09-09 14 views
5

getRange alan yerine adlandırılmış bir menzile sahip olmak için kullanılabilir mi?
Bunu yaptığımda, argümanın bir aralık olması gerektiğini söylüyor. Örneğin ,getRange ile belirtilen aralık google elektronik tabloları kullanarak komut dosyaları

yerine:

 getRange("A4:E7"); 

A4:E7 alanı Sayfa1'deki 'İsimler' adlı bir adlandırılmış aralığa yapılmıştır.

belki kullanmak Could:

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

Veya bunu yapmanın başka bir yolu yoktur. Tam kodu:

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

Yine de buna takıldım - google betiğinin neden tanımlanmış ismin kullanılmasına izin verdiğinden emin değilim – user1658604

+0

Sorununuza bir cevap değil, sadece bir öneri: "getActiveCell()' "ye ihtiyacınız yoktur). Düzenleme olayı düzenlenmiş aralığını komut dosyasına iletir, böylece yalnızca 'event.range.getColumn() 'işlevini kullanabilirsiniz. – Tharkon

cevap

10

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

adlandırılan aralığın A1 adresini dönen Custom fonksiyonu:

=myGetRangeByName("Names") 

Bu: tablo üzerinde bir hücrede,

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

Sonra "İsimler", hücreye ne şekilde tanımlanırsa koyardı. GAS'ın agresif önbelleklemesi nedeniyle "Adlar" ı yeniden tanımladığınızda güncellenmez. Bununla birlikte, GAS'ı her sayfa hesaplamasında güncellemeye zorlayabilirsiniz.

=myGetRangeByName("Names",now()) 

Javascript kullanılmayan parametreyi yok sayar.

Aşağıdaki kod, düşündüğün şeyi yapar. Sayfanın ilk sütunu düzenlendiğinde, aralığı o sütuna göre sıralar. Sütun A liste dışı taşırsanız getColumn() mutlak sütun, aralıktaki hücrenin değil konumunu döndürdüğü için

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

Bu

, çalışmayacak. Bunun için ayarlamak için kod eklemeniz gerekir.

+0

Bu ne ile şimdide() '? Onu bir kağıda döktüm ve eritti. Now() parametresi için – jcollum

+0

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

+0

+1, cool! – mTorres

İlgili konular