Google Apps脚本 - 根据单元格值查找行号

时间:2014-07-16 16:27:46

标签: google-apps-script

我正在寻找一些帮助,找到包含特定值的单元格的行号。

电子表格包含多行数据和大量数据。列。我循环遍历.getDataRange,并且可以找到包含I&#39; m寻找的值的单元格。一旦找到,我想知道他的单元格所在的行,这样我就可以进一步获取其他单元格值,因为我确切知道有多少行和/或其他信息的列来自找到的单元格。< / p>

以下是查找包含特定字符串的单元格的一些代码。

function findCell() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  var dataRange = sheet.getDataRange();
  var values = dataRange.getValues();

  for (var i = 0; i < values.length; i++) {
    var row = "";
    for (var j = 0; j < values[i].length; j++) {     
      if (values[i][j] == "User") {
        row = values[i][j+1];
        Logger.log(row);
      }
    }    
  }  
}

输出Logger.log(row)时,它会显示我正在寻找的值。我想确定每个值在哪一行,这样我就可以按X行数和X列来获取其他单元格的内容。

2 个答案:

答案 0 :(得分:5)

我对谷歌应用程序了解不多,但在这种情况下看起来[i]是你的行号。

所以如果你做了类似的事情:

function findCell() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  var dataRange = sheet.getDataRange();
  var values = dataRange.getValues();

  for (var i = 0; i < values.length; i++) {
    var row = "";
    for (var j = 0; j < values[i].length; j++) {     
      if (values[i][j] == "User") {
        row = values[i][j+1];
        Logger.log(row);
        Logger.log(i); // This is your row number
      }
    }    
  }  
}

答案 1 :(得分:5)

此方法查找给定值的特定列中的行号:

function rowOf(containingValue, columnToLookInIndex, sheetIndex) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheets();
  var dataRange = sheet[sheetIndex].getDataRange();
  var values = dataRange.getValues();

  var outRow;

  for (var i = 0; i < values.length; i++)
  {
    if (values[i][columnToLookInIndex] == containingValue)
    {
      outRow = i+1;
      break;
    }
  }

  return outRow;
}

但是如果你这样做,它就不会刷新,除非你改变任何参数,因为自定义函数应该是确定性的,也就是说,对于相同的参数,它应该总是给出相同的结果。

相反,最好这样做:

function rowOf(containingValue, range) { 
  var outRow = null;

  if(range.constructor == Array)
  {
    for (var i = 0; i < range.length; i++)
    {
      if(range[i].constructor == Array && range[i].length > 0)
      {
        if (range[i][0] == containingValue)
        {
          outRow = i+1;
          break;
        }
      }
    }
  }

  return outRow;
}

在这种情况下,您需要传递您想要的完整列范围:

rowOf("MyTextToLookFor", 'MySheetToLookIn'!A1:A)

您可以使用您选择的列替换A,使用工作表的名称替换MySheetToLookIn,使用您要查找的文本替换MyTextToLookFor。

这将允许它在添加行和删除行时刷新。