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