查找具有特定值的单元格的列号

时间:2015-08-23 23:54:05

标签: google-apps-script google-sheets

我目前有一个代码可以获取包含特定字符串的单元格的行号。以下是代码示例:

var ss = SpreadsheetApp.getActiveSheet();
var values = ss.getRange("B:B").getValues();
var i=j=firstrow=lastrow=0;
for(i=0;i<values.length;i++)
for(j=0;j<values[i].length;j++) {
  if(values[i][j]==5100) firstrow=i+1;
else if(values[i][j]=='EOL') lastrow=i-2;
}

我想知道是否可以执行上述操作,但对于列,这样,如果用户意外移动列,我的脚本就不会崩溃。

1 个答案:

答案 0 :(得分:1)

所以,正在做的是使用.getRange("B:B")来定义你想要列B中的所有行。然后使用getValues()将所有这些行作为多维数组返回(显然这只会有一个列 - 所以你可能不需要那个其他for循环)。

因此,您只需使用.getRange(row, column)(其中rowcolumn的整数大于1),这样您就可以使用{{一次一次查看电子表格中的一项1}}。因此,您最初可以查看第一行以查找您所在的列索引,然后向下查看行以查找所需的数据。

这样的事可能适合你:

getValue()

要记住的一件事是,数组基于0,而基于var ss = SpreadsheetApp.getActiveSheet(); var valueColumn; for(i=1;i<ss.getLastColumn();i++) { if (ss.getRange(1,i).getValue() == "ColumnName") { valueColumn = i; break; } } //At this point I assume that we have a value in valueColumn, if not this won't work. var values = ss.getRange(2, valueColumn, ss.getLastRow()).getValues(); var i=firstrow=lastrow=0; for(i=0;i<values.length;i++) { if(values[i][0]==5100) firstrow=i+1; else if(values[i][0]=='EOL') lastrow=i-2; } 为1。

我的电子表格很小,因此进行一次调用和获取所有数据的速度影响很小,但如果您实际使用的是大型工作表,则可能会发现一种方法比另一种更快。