2016-03-30 2 views
0

Ich habe eine Tabelle mit einem Skript, das eine andere Tabelle auf den Namen eines Kunden überprüft und den zugehörigen Kundencode zurückgibt. Es funktioniert gut, solange der Kundenname in der "CustomerCodes" -Blatt, die es verweist. Wenn der Kundenname dort nicht existiert, würde ich gerne den Variablenwert "customerCode" auf "Keine Übereinstimmung gefunden" setzen. Im Moment gibt es nur einen Fehler und führt das Skript nicht weiter aus. Hier ist der Code:Legen Sie einen anderen var-Wert fest, wenn die "for" -Schleife einen Fehler zurückgibt

var customerName = sheet.getRange('I2').getValue(); 
 
    
 
    var ccsheet = ss.getSheetByName("CustomerCodes"); 
 
    var lastRow = ccsheet.getLastRow(); 
 
    
 
    Logger.log("lastRow: " + lastRow); 
 
    
 
    var lookUp = ccsheet.getRange(2, 1, lastRow, 3).getValues(); 
 
    
 
    for (nn=0; nn<lookUp.length; ++nn) { 
 
    if (lookUp[nn][0] == customerName) {break} 
 
    } 
 

 
    //This is where I am having the trouble 
 
    var customerCode = lookUp[nn][1]; 
 
    
 
    Logger.log("customerCode: " + customerCode);

Also, wenn die "für" Schleife eine Übereinstimmung findet, es setzen Sie die "customerCode" Variable in diesem Spiel. Wenn keine Übereinstimmung gefunden wird, möchte ich die Variable "customerCode" auf "Keine Übereinstimmung gefunden" setzen, damit der Benutzer weiß, warum der Code des Kunden nicht zurückgegeben wurde. Der Wert der Variablen "customerCode" wird dem Benutzer später in der Funktion zurückgegeben.

Ich verstehe Fehlerbehandlung nicht sehr gut, da ich wirklich neu in all dem bin, und ich konnte keine google apps Skriptdokumentation finden, die es gut erklärte. Vielen Dank für Ihre Hilfe!

+1

Was ist der Fehler? – epascarello

+0

Der Fehler, den ich erhalte, ist: "TypeError: Kann die Eigenschaft" 1 "von undefined (Zeile 32, ...) nicht lesen. Zeile 32 ist wo ich das // setze. Ich habe die Probleme. – JLBJones

+0

I haven Ich hatte noch keine Chance, Ihre Lösung zu testen, aber es sieht so aus, als würde es funktionieren. Danke! – JLBJones

Antwort

1

Für Informationen gibt tatsächlich viele Möglichkeiten geben, willst das gewünschte Ergebnis zu bekommen ... Eine einfache und lesbare Weise sein würde, wie folgt :

var customerCode = 'no customer with this ID found in the list'; 
for (var nn=0; nn<lookUp.length; ++nn) { 
    if (lookUp[nn][0] == customerName) { 
     customerCode = lookUp[nn][1]; 
     break; 
    } 
} 

, das das gleiche Ergebnis natürlich gibt vermeidet aber oben verwendet, um die Kurzform IF THEN ELSE Anweisung (auch bekannt als ternärer Operator) verwendet wird.

+0

Danke, das scheint eine einfachere Lösung zu sein. – JLBJones

2

Fügen Sie also Code hinzu, um zu sehen, ob Sie eine Übereinstimmung haben. Andere Möglichkeit ist, um zu prüfen, ob die Variablen nn ist kleiner als die Länge

var matchIndex = -1; 
for (var nn=0; nn<lookUp.length; ++nn) { 
    if (lookUp[nn][0] == customerName) { 
     matchIndex=nn; 
     break; 
    } 
} 

//This is where I am having the trouble 
var customerCode = matchIndex===-1 ? "Not found" : lookUp[matchIndex][1]; 
+0

Perfekt gearbeitet! Schön! Was würde diese Zeile beschreiben, damit ich mehr darüber erfahren kann? var customerCode = matchIndex == = -1? "Not found": lookUp [matchIndex] [1]; – JLBJones

+0

ternärer Operator – epascarello

+0

Perfect Ich werde Informationen über ternäre Operatoren nachschlagen und lernen, wie man sie benutzt.Herzlich, dass Sie mich auch auf die richtigen Referenzmaterialien hingewiesen haben – JLBJones