2016-04-01 2 views
1

前の機能は動作していますが、前回の機能の前にクリックしています。私はエラー 'CAN NOT CALL METHOD' toString to undefinedを取得しています。 私のコードを参考にしてください。以前の機能で下の強調表示されたコードで試行錯誤しています。ありがとうございます。Google Appのスクリプト検索UIツールの以前の機能のエラー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!='') 

{; //マッチは3つのフィールドのいずれかで検出された場合、ループandshoresultsを f1box.setTextブレーク(データ[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;}} 

リターンアプリ。 }

答えて

0

インデックスnnを使用してデータ配列を反復していますが、配列の構築方法のためにこの配列の最後の項目は空です。 もし

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

を使用してそれを宣言するときに、行2から開始し、データが最後の(LASTROWを充填データ範囲の全高を返す)の下に空の行を含むことを意味長さLASTROW値を取得します。

var data = ss.getRange(2,1,lastrow-1,6)を使用して試してみて、それが問題に

ノートを解決する必要があります。これは、私はもともと数年前に書いた(修正)コードであり、私は元のスクリプト;-)

+0

でそのミスを犯していないことを確認私はまだエラーを取得することはできませんメソッドを呼び出すことはできません未定義の。私も他のコードを編集する必要がありますか?私は前のボタンの最後の結果になるときに "一致しません"を得るべきです。ありがとう助けてください –

+0

あなたの前の機能のコピーを得ることができますか?私の強調表示されたコードを上記から確認してください...サー・セルジュ。var start = Number(eventInfo.parameter.hidden)-1;または(nn = start; nn

+0

オリジナルのスクリプトを正しいバージョンで見つけることができませんが、必要に応じてスプレッドシートのコピーを(読み取り専用でプライベートデータなしで)共有し、ここにリンクを表示することができます。 –