2016-04-01 5 views
1

Zurück-Funktion funktioniert, aber wenn ich werde vorherige für die letzte sesrch davon klicken. Ich bekomme einen Fehler 'CAN CALL METHOD' toString von undefined. Bitte helfen Sie mit meinem Code. Ich habe eine Versuch und Irrtum mit dem markierten Code unten in der vorherigen Funktion. bitte hilfe danke.Google App Script Suche UI-Tool mit Zurück-Funktion ERROR

function click(eventInfo){ 
var ss = SpreadsheetApp.openById('1qpx2qZvBriBZ3jkOfHjMpsRbL9w04JZEJMeor11OJC81').getSheetByName("Teaching"); 
var app = UiApp.getActiveApplication(); 
var row=ss.getActiveRange().getRowIndex();  
var lastrow = ss.getLastRow(); 
     app.getElementById("txbid").setEnabled(true).setText("Search");                        

    var item = eventInfo.parameter.itemname; 
    var next = app.getElementById("nextid").setEnabled(false); 
    var pre = app.getElementById("previd").setEnabled(false); 
    var lbl = app.getElementById("lblid").setText("No match"); 
    var f1 = eventInfo.parameter.thirdname; 
    var f2 = eventInfo.parameter.fourthname; 
    var f3 = eventInfo.parameter.fifthname; 
    var f4 = eventInfo.parameter.emailname; 
    var f1box = app.getElementById("thirdid"); 
    var f2box = app.getElementById("fourthid"); 
    var f3box = app.getElementById("fifthid"); 
    var f4box = app.getElementById("emailid"); 
    var hidden = app.getElementById("hidden");     
    var data = ss.getRange(2,1,lastrow,6).getValues();// get the 3 columns of data 
     for(nn=0;nn<data.length;++nn){ ;// iterate trough 
     if(data[nn].toString().toLowerCase().match(item.toString())==item.toString()&&item!='') {;// if a match is found in one of the 3 fields, break the loop and show results 
    f1box.setText(data[nn][2]);   
    f2box.setText(data[nn][3]); 
    f3box.setText(data[nn][4]); 
    f4box.setText(data[nn][5]); 
     app.getElementById("nextid").setEnabled(true).setText("Next");                        
     app.getElementById("txbid").setEnabled(true).setText("Search");                        
      ss.getRange(nn+2,2).activate(); 
      lbl.setText("found from"+data[nn][0]+"-"+data[nn][1]+", click Next").setEnabled(true); 
      hidden.setValue(nn.toString()) 
      break;}} 
    return app; 
} 
function next(eventInfo){ 
    var ss = SpreadsheetApp.openById('1qpx2qZvBriBZ3jkOfHjMpsRbL9w04JZEJMeor11OJC81').getSheetByName("Teaching"); 
var app = UiApp.getActiveApplication(); 
var row=ss.getActiveRange().getRowIndex();  
var lastrow = ss.getLastRow(); 
     app.getElementById("txbid").setEnabled(true).setText("Search");                        

    var item = eventInfo.parameter.itemname; 
    var next = app.getElementById("nextid").setText("No match").setEnabled(false); 
    var pre = app.getElementById("previd").setEnabled(true); 
    var lbl = app.getElementById("lblid").setText("0 results to display"); 
    var f1 = eventInfo.parameter.thirdname; 
    var f2 = eventInfo.parameter.fourthname; 
    var f3 = eventInfo.parameter.fifthname; 
    var f4 = eventInfo.parameter.emailname; 
    var f1box = app.getElementById("thirdid").setText(""); 
    var f2box = app.getElementById("fourthid").setText(""); 
    var f3box = app.getElementById("fifthid").setText(""); 
    var f4box = app.getElementById("emailid").setText(""); 
    var start = Number(eventInfo.parameter.hidden)+1; 
    var hidden = app.getElementById("hidden");     
    var data = ss.getRange(2,1,lastrow,6).getValues();// get the 3 columns of data 
     for(nn=start;nn<data.length;++nn){ ;// iterate trough 
     if(data[nn].toString().toLowerCase().match(item.toString())==item.toString()&&item!='') {;// if a match is found in one of the 3 fields, break the loop and show results 
    f1box.setText(data[nn][2]);   
    f2box.setText(data[nn][3]); 
    f3box.setText(data[nn][4]); 
    f4box.setText(data[nn][5]); 
     app.getElementById("previd").setEnabled(true).setText("Previous");                         
     app.getElementById("nextid").setEnabled(true).setText("Next");                         
     app.getElementById("txbid").setEnabled(true).setText("Search");                        
      ss.getRange(nn+2,2).activate(); 
      lbl.setText("found from"+data[nn][0]+"-"+data[nn][1]+", click Next").setEnabled(true); 
      hidden.setValue(nn.toString()) 
      break;}} 
    return app; 
} 
function previous(eventInfo){ 
    var ss = SpreadsheetApp.openById('1qpx2qZvBriBZ3jkOfHjMpsRbL9w04JZEJMeor11OJC81').getSheetByName("Teaching"); 
var app = UiApp.getActiveApplication(); 
var row=ss.getActiveRange().getRowIndex();  
var lastrow = ss.getLastRow(); 
     app.getElementById("txbid").setEnabled(true).setText("Search");                        

    var item = eventInfo.parameter.itemname; 
    var next = app.getElementById("nextid").setEnabled(true); 
    var pre = app.getElementById("previd").setText("No match").setEnabled(false); 
    var lbl = app.getElementById("lblid").setText("No match"); 
    var f1 = eventInfo.parameter.thirdname; 
    var f2 = eventInfo.parameter.fourthname; 
    var f3 = eventInfo.parameter.fifthname; 
    var f4 = eventInfo.parameter.emailname; 
    var f1box = app.getElementById("thirdid").setText(""); 
    var f2box = app.getElementById("fourthid").setText(""); 
    var f3box = app.getElementById("fifthid").setText(""); 
    var f4box = app.getElementById("emailid").setText(""); 
var start = Number(eventInfo.parameter.hidden)-1; 
     var hidden = app.getElementById("hidden");     
     var data = ss.getRange(2,1,lastrow,6).getValues();// get the 3 columns of data 



     for(nn=start;nn<data.length;--nn){ ;// iterate trough*** 

if(data[nn].toString().toLowerCase().match(item.toString())==item.toString()&&item!='') 

{// Wenn eine Übereinstimmung in einem der 3 Feldern gefunden wird, bricht die Schleife andshoresults f1box.setText (data [nn] [2]);
f2box.setText (Daten [nn] [3]);
f3box.setText (Daten [nn] [4]); f4box.setText (Daten [nn] [5]); app.getElementById ("previd"). SetEnabled (true) .setText ("Zurück");

 app.getElementById("nextid").setEnabled(true).setText("Next");   

     app.getElementById("txbid").setEnabled(true).setText("Search");  

      ss.getRange(nn+2,2).activate(); 
      lbl.setText("found from"+data[nn][0]+"-"+data[nn][1]+", click Next").setEnabled(true); 
      hidden.setValue(nn.toString()) 
      break;}} 

Rückkehr app; }

Antwort

0

Sie wiederholen das Datenarray mit dem Index nn, aber das letzte Element dieses Arrays ist leer, da das Array erstellt wird. Wenn man es erklären

var data = ss.getRange(2,1,lastrow,6).getValues();// get the 3 columns of data 

Verwendung starten Sie von Zeile 2 und LastRow Wert für Länge erhalten, die Daten bedeutet, die leere Zeile unterhalb der letzten enthält (LastRow gibt die Gesamthöhe von gefüllten Datenbereichs).

versuchen var data = ss.getRange(2,1,lastrow-1,6) verwenden und es sollte das Problem

Anmerkung lösen: Das ist eine (modifizierte) Code ist ich ursprünglich vor ein paar Jahren schrieb, nicht sicher, ob ich diesen Fehler in Originalschrift ;-)

+0

gemacht Ich bekomme immer noch den Fehler kann nicht Methode toSting von undefined aufrufen. Sollte ich auch anderen Code bearbeiten? Ich soll „keine Übereinstimmung“ erhalten, wenn es das letzte Ergebnis für die vorherige Taste sein .. bitte helfen dank –

+0

kann ich eine Kopie Ihrer vorherigen Funktion bekommen? Oder können Sie es einfügen hier, so kann ich sehen, was mein Fehler. es ist eine große Hilfe .. :(Bitte überprüfen Sie meinen hervorgehobenen Code von oben ... danke Sir Serge. var start = Nummer (eventInfo.parameter.hidden) -1; oder für (nn = start; nn

+0

ich kann nicht meinen Original-Skript in der richtigen Version finden, aber wenn Sie möchten, können Sie eine Kopie Ihrer Tabelle teilen (in nur lesen und ohne private Daten) und zeige den Link hier. –