Das Mitarbeiterblatt enthält den Namen des Mitarbeiters in Zelle C2. Der Name des Mitarbeiters sollte auch auf dem Datenblatt im Bereich B3: B153 stehen.
Wie kann ich die mit dem Namen des Mitarbeiters übereinstimmende Nummer der Zelle im Datenblatt erhalten?
Ich habe das folgende Skript ausprobiert, aber es scheint nicht zu funktionieren.
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;
}
Hier der 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;
}
}
}
Wenn Sie diese Art von Lookup durchführen möchten, ist es besser, Daten mit sheet.getDataRange (). GetValues () abzurufen, da in diesem Fall Daten als Wertetabelle schneller angezeigt werden. Wenn Sie den Standard EmployeeSheet.getRange (2,3,1,1) .getValue () verwenden, rufen Sie tatsächlich ein Objekt ab, das mehr Zeit benötigt, um verarbeitet zu werden, und jedes Mal, wenn Sie die Tabelle abfragen.
In meinem Beispiel habe ich nur eine Abfrage ausgeführt, um alle Daten abzurufen, statt eine Abfrage, um jedes Mal eine Daten abzurufen.
Stéphane
Ich ziehe es vor, alle Werte einmal in ein Array zu laden, wenn das Blatt geöffnet wird, und dann mit Array.indexOf () den Index der übereinstimmenden Zeichenfolge nachzuschlagen. Ich denke, diese Lösung wird weniger Ausführungszeit haben als andere Lösungen.
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
}
}