找到细胞匹配值并返回Rownumber

Len*_*rtB 23 row-number google-docs google-sheets google-apps-script

员工表包含单元格C2中员工的姓名.员工的姓名也应该在B3:B153范围内的数据表中.

如何在数据表中获取与员工姓名匹配的单元格的rownumber?

我尝试了以下脚本,但它似乎不起作用.

  var Sheet = SpreadsheetApp.getActive();
  var Employeesheet = Sheet.getSheetByName('Employee')
  var DataSheet = Sheet.getSheetByName('Data');
  var Column = Sheet.getRange(3,2,151,1);
  var Values = column.getValues(); 
  var Row = 0;

  while ( Values[Row] && Values[Row][0] !=(EmployeeSheet.getRange(2,3,1,1).getValue()) ) {
    Row++;
  }

  if ( Values[Row][0] === (EmployeeSheet.getRange(2,3,1,1).getValue()) ) 
    return Row+1;
  else 
    return -1;

  }
Run Code Online (Sandbox Code Playgroud)

St3*_*3ph 39

这里的代码

function rowOfEmployee(){
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var data = sheet.getDataRange().getValues();
  var employeeName = sheet.getRange("C2").getValue();
  for(var i = 0; i<data.length;i++){
    if(data[i][1] == employeeName){ //[1] because column B
      Logger.log((i+1))
      return i+1;
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

当您想要执行这种查找时,最好使用sheet.getDataRange().getValues()检索数据,因为在这种情况下,您将获取数据作为值表,这样更快.当您使用标准的EmployeeSheet.getRange(2,3,1,1).getValue()时,实际上您检索的对象需要更多时间进行处理,并且每次查询电子表格时.

在我的例子中,我只做了一个查询来检索所有数据而不是n查询每次检索一个数据.

斯特凡


Cha*_*tos 15

我今天遇到了这个问题,我找到了一种本地方法来完成这项工作。

这是测试它是否适合您的代码段:

  var spreadsheet = SpreadsheetApp.getActive();
  var tosearch = "your text to search";
  var tf = spreadsheet.createTextFinder(tosearch);
  var all = tf.findAll();
  
  for (var i = 0; i < all.length; i++) {
    Logger.log('The sheet %s, cell %s, has the value %s.', all[i].getSheet().getName(), all[i].getA1Notation(), all[i].getValue());
  }
Run Code Online (Sandbox Code Playgroud)