2012-09-09 138 views
5

可以使用getRange命名範圍而不是區域嗎?
當我似乎這樣做時,它說參數必須是一個範圍。 例如,getRange與命名區域谷歌電子表格使用腳本

相反的:

 getRange("A4:E7"); 

A4:E7該地區已被製作成在Sheet1中稱爲 '名' 命名的範圍。

你能或者用:

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

還是有做的任何其他方式。完整的代碼是:

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

仍然堅持這一點 - 我不知道爲什麼谷歌腳本不允許使用定義的名稱 – user1658604

+0

不是你的問題的答案,但只是一個建議:你不需要'getActiveCell()'。編輯事件將編輯的範圍傳遞給腳本,以便您可以使用'event.range.getColumn()'。 – Tharkon

回答

10

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

定義函數返回的命名範圍A1地址:

=myGetRangeByName("Names") 

此:在電子表格上

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

然後,在細胞會把任何「名稱」定義爲單元格。由於GAS的積極緩存,當您重新定義「名稱」時它不會更新。但是,您可以強制GAS在每張紙上計算更新它。

=myGetRangeByName("Names",now()) 

javascript將忽略未使用的參數。

下面的代碼做我認爲你打算。當工作表的第一列被編輯時,它會根據該列對範圍進行排序。如果您將關閉名單列A

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

這是行不通的,因爲getColumn()返回絕對列,該範圍內的單元格的不是位置。你將不得不添加代碼來進行調整。

+0

那是什麼'now()'?我把它放在一張紙上,它錯了。 – jcollum

+0

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

+0

對於now()參數爲+1,很酷! – mTorres

相關問題