it-swarm.asia

Hücre Eşleştirme Değerini ve İade Rownumber'ı Bul

Çalışan sayfası, C2 hücresindeki çalışanın adını içerir. Çalışanın adı aynı zamanda B3: B153 aralığındaki veri sayfasında olmalıdır.

Çalışan adı ile eşleşen veri sayfasındaki hücrenin satır sayısını nasıl alabilirim?

Aşağıdaki betiği denedim ama işe yaramadı.

  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;

  }
17
LennartB

İşte kod

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;
    }
  }
}

Bu tür bir arama yapmak istediğinizde, sheet.getDataRange (). GetValues ​​() ile veri almak daha iyidir, çünkü bu durumda verileri daha hızlı bir değer tablosu olarak alırsınız. Standart EmployeeSheet.getRange (2,3,1,1) .getValue () kullandığınızda, aslında işlenmesi için daha fazla zamana ve elektronik tabloyu her sorguladığınızda gereken bir nesneyi alırsınız.

Örneğimde, her seferinde bir veri almak için n sorgusu yerine tüm verileri almak için sadece bir sorgu yaptım.

Stéphane

29
St3ph

Sayfa açıldığında tüm değerleri bir diziye yüklemeyi ve ardından eşleşen dizenin dizinini aramak için Array.indexOf () öğesini kullanmayı tercih ederim. Bu çözümün diğer çözümlerden daha az yürütme süresi olacağını düşünüyorum.

function updateValues(){
  dataRangeSearch = activeSheet.getRange(1,1,activeSheet.getLastRow());
  dataSearch = dataRangeSearch.getValues().reduce(function (a, b) {
    return a.concat(b);
  });;
}
updateValues();

function findValue(fieldName){
  var row = dataSearch.indexOf(fieldName);
  if (row == -1){ // Variable could not be found
    SpreadsheetApp.getUi().alert('I couldn\'t find field name "'+fieldName+'"');
    return "";
  } else {
    return activeSheet.getRange(row+1,2).getValue(); //Return the value of the field to the right of the matched string
  }
}
0
Julian