我目前有一个代码可以获取包含特定字符串的单元格的行号。以下是代码示例:
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;
}
我想知道是否可以执行上述操作,但对于列,这样,如果用户意外移动列,我的脚本就不会崩溃。
答案 0 :(得分:1)
所以,正在做的是使用.getRange("B:B")
来定义你想要列B中的所有行。然后使用getValues()
将所有这些行作为多维数组返回(显然这只会有一个列 - 所以你可能不需要那个其他for循环)。
因此,您只需使用.getRange(row, column)
(其中row
和column
的整数大于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。
我的电子表格很小,因此进行一次调用和获取所有数据的速度影响很小,但如果您实际使用的是大型工作表,则可能会发现一种方法比另一种更快。