使用搜索字符串查找单元格

时间:2016-11-16 17:26:02

标签: javascript google-apps-script google-sheets

在使用Google Apps脚本的Google表格中,我想获取单元格R33的值作为搜索字符串(简单),在S:S(我被难倒)中找到该搜索字符串的下一个实例,然后激活找到值的单元格(简单)。特别是,我无法弄清楚如何进行简单的搜索(本质上是一个vlookup)。我已经尝试在列中循环并比较如下:

function Vlookupscript( name, sheet, columnIndexWithNames, rowIndexToStart ) {    
  var maxRows = sheet.getLastRow() - 1;
  var range = sheet.getRange( rowIndexToStart, columnIndexWithNames, maxRows );
  var numRows = range.getNumRows();
  var index = -1;
  var cell; 
  var value;

  for ( var i = 1; i <= numRows; i++ ) {
    cell = range.getCell( i, 1 );
    value = cell.getValue();
    if ( value === name ) {
      index = i;
    }
  }
  return index;
}

其中name是要搜索的值。

然而,即使在使用logger.log(i)的循环结束时,我也完全没有输出。我确信有一种更简单的方法;例如,我可以将列加载为数组并搜索该数组,获取索引,然后使用相应的索引激活单元格吗?

1 个答案:

答案 0 :(得分:2)

有一种更快的方法。目前,每次要检查值时都会调用SpreadsheetApp,这需要一些时间。首先,你应该做maxRows = sheet.getLastRow()并摆脱- 1

我将假设name是您要搜索的值。那么您可以执行以下操作

values = SpreadsheetApp.getActiveSheet().getRange('S:S').getValues()
for (i = 0; i = values.lenght; i++){
  if (values[i][0] == name) {
    sheet.getRange(i+1, 19).activate()
    return
  }
}

你也可以用

来做值

values = SpreadsheetApp.getActiveSheet().getRange(1,19,maxRows-1,1).getValues()

前提是您已更改为- 1变量的maxRows。这将遍历所有值,如果值匹配,则将单元格设置为活动