具有上一个功能错误的Google App脚本搜索UI工具

时间:2016-04-01 07:31:45

标签: javascript google-apps-script

上一个功能正在运行,但是当我要点击之前的最后一个sesrch时。我得到一个错误'无法调用方法'到未定义的字符串。 请帮助我的代码。我在上一个函数中使用下面突出显示的代码进行了试错。请帮忙谢谢。

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个字段之一中找到匹配项,则打破循环和结果         f1box.setText(数据[NN] [2]);
        f2box.setText(数据[NN] [3]);
        f3box.setText(数据[NN] [4]);         f4box.setText(数据[NN] [5]);             app.getElementById( “previd”)的setEnabled(真).setText( “上一页”);

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

返回app;     }

1 个答案:

答案 0 :(得分: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),它应该解决问题

注意:这是我几年前写的(修改过的)代码,不确定我在原始脚本中犯了这个错误; - )