2016-07-25 11 views
1

Ich habe versucht, das Problem für zwei Tage allein zu lösen, und schließlich hierher kommen.Google-Skript für die benutzerdefinierte Verkettung von Werten in einem Bereich

Ich muss eine benutzerdefinierte Funktion in Google-Skript schreiben, die die Werte des Bereichs mit einigen Filter verkettet (d. H. Leere Zellen oder Zellen mit Wert gleich "-" überspringen).

Formel in google Blätter sollten wie folgt aussieht:

=concat_costum(A3:N3,"-") 

Ergebnis sollte wie folgt aussieht:

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

01:

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

ich den nächsten Code geschrieben

aber die seine Ausgabe:

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

bitte

Antwort

1

Faster Formel

Benutzerdefinierte Funktionen helfen eine Weile manchmal laden nehmen, und Ihr Problem ist einfach genug, um eine viel schnellere Tabelle zu verwenden, Formel:

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

Cu stom Funktion

Sie können es auch tun, als eine benutzerdefinierte Funktion in Array-Funktionen gebaut einige von JavaScript verwendet:

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

Aber Sie müssen sicherstellen, dass die Paramter array ist ein eindimensionales Array. Ein Tabellenkalkulationsbereich wird entweder als einzelner Wert, als zweidimensionales Array übergeben.

+0

Danke Josh! –