2016-07-25 31 views
1

我試圖解決這個問題兩天,終於來到這裏。谷歌腳本的自定義串聯值範圍

我需要在谷歌腳本中編寫一個自定義函數,這個自定義函數將通過一些過濾器來連接範圍值(即跳過空白單元格或值等於「 - 」的單元格)。在谷歌片

公式應該是這樣的:

=concat_costum(A3:N3,"-") 

結果應該是這樣的:

trpd-hex-phex-crfl-wi-ins-td-max_op_temp 

我寫了下面的代碼:

function concat_costum(pRange,s){ 
 
    var out="" 
 
    for(i=0;i<pRange.length;++i){ 
 
    var currentValue = pRange[i] 
 
    if (!(currentValue == "-" || currentValue == "" || currentValue == "undefined")) { 
 
     out = out+currentValue+s 
 
    } 
 
    
 
    } 
 
    return out.slice(0,-1) 
 
}

但它的輸出是:

trpd,hex,phex,crfl,,-,wi,ins,td,max_op_temp,,,, 

請幫助

回答

1

更快的公式

自定義函數可需要一段時間,有時加載,和你的問題很簡單,使用更快的電子表格公式:

=join("-", filter(A1:A6, A1:A6 <> "")) 

Cu自定功能

你也可以做到這一點作爲一個自定義的功能,通過利用一些JavaScript的內置陣列功能:

function concat_custom(s, array) { 
    array = conformToOneDimensionalArray(array); 

    return array.filter(function (value) { 
     return value != ""; 
    }).join("-"); 
} 

function conformToOneDimensionalArray(value) { 
    if (!Array.isArray(value)) { 
    value = [value]; 
    } 
    else if (Array.isArray(value[0])) { 
    value = value.reduce(function(a, b) { 
     return a.concat(b); 
    }); 
    } 

    return value; 
} 

但是,你需要確保的是,放慢參數array是一維數組。電子表格範圍將作爲單個值傳遞給一個二維數組。

+0

謝謝喬希! –