web-dev-qa-db-fra.com

Trouver la valeur de correspondance de cellule et le nombre de retour

La feuille Employé contient le nom de l'employé dans la cellule C2. Le nom de l'employé doit également figurer sur la fiche technique dans la plage B3: B153.

Comment puis-je obtenir sur la fiche technique le numéro d'identification de la cellule qui correspond au nom de l'employé?

J'ai essayé le script suivant mais cela ne semble pas fonctionner.

  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

Ici le code

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

Lorsque vous souhaitez effectuer ce type de recherche, il est préférable de récupérer des données avec sheet.getDataRange (). GetValues ​​() car dans ce cas, vous obtiendrez des données sous forme de table de valeurs, cela sera plus rapide. Lorsque vous utilisez la méthode standard EmployeeSheet.getRange (2,3,1,1) .getValue (), vous récupérez un objet dont le traitement nécessite plus de temps et chaque fois que vous interrogez la feuille de calcul.

Dans mon exemple, je n’ai fait qu’une requête pour récupérer toutes les données à la place n requête pour récupérer une donnée à la fois.

Stéphane

29
St3ph

Je préfère charger toutes les valeurs dans un tableau une fois que la feuille est ouverte, puis utiliser Array.indexOf () pour rechercher l'index de la chaîne correspondante. Je pense que cette solution aura moins de temps d'exécution que d'autres solutions.

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