上一个功能正在运行,但是当我要点击之前的最后一个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; }
答案 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)
,它应该解决问题
注意:这是我几年前写的(修改过的)代码,不确定我在原始脚本中犯了这个错误; - )