2013-08-16 40 views
2

我有一個谷歌腳本功能,讓我從谷歌電子表格範圍。是否可以在谷歌腳本中引用離散範圍?

function getGrainWeights() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    return range = ss.getRangeByName("Brew_Grains"); 
} 

該範圍然後由另一個函數處理,該函數修改和上傳範圍中的值。

「Brew_Grains」是我電子表格中的一個命名範圍,但我想用離散範圍(如「B2,C3,D10」等)替換它。這是可能的,還是有一些解決方法? 乾杯

+0

相關(dup?)問題:http://stackoverflow.com/q/35510298/405017 – Phrogz

回答

3

除了使用的命名範圍getRangeByName(name)之外,您還可以通過以下方式獲取範圍。

Get a range

您可以找到documentation

UPDATE

的解決方法,你想要做的可以是類似的:

... 
    var ss = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0]; 
    var ranges = []; 
    var range = ss.getRange('B2:C3'); 
    ranges.push(range); 
    range = ss.getRange('D10'); 
    ranges.push(range); 
    processingFunction(ranges); 
    ... 

您可以在陣列(範圍),然後傳遞到處理其它任何功能。

+1

據我所知,getRange(a1Notation)只允許一次獲得一個單元 - 即我不能獲得「B2,C3,D10」作爲範圍嗎?其他方法是指獲得連續範圍?我目前的工作是將多個連續範圍傳遞給一個數組,然後對該數組執行一些操作,然後將更新後的數組值傳回給範圍 - 有點笨重! – user1650538

+0

查看已更新的答案。 – wchiquito

0

你不能(據我所知)加入兩個Range對象。但是,如果您有一個可在多維數組上運行的自定義函數,則可以將範圍轉換爲數組並將它們連接起來。

例如:

function SUM_RANGE_COLUMN(myRange,colIndex){ 
    var val,sum=0; 
    for (var i=0;i<myRange.length;i++) if (val=myRange[i][colIndex]) sum+=val; 
    return sum; 
} 

function UNION(range1,range2){ 
    return range1.concat(range2); 
} 

通過以上的自定義功能,您可以在電子表格中這樣寫:

=SUM_RANGE_COLUMN(UNION(E4:F5,E9:F12), 1) 

要兩個真正的範圍轉換成陣列,使用getValues()

function joinRanges(range1, range2){ 
    return range1.getValues().concat(range2.getValues()); 
} 
相關問題