7

Arkusz pracownika zawiera imię i nazwisko pracownika w komórce C2. Nazwisko pracownika powinno znajdować się również w arkuszu danych w zakresie B3: B153.Znajdź komórkową wartość dopasowania i zwrot Rownumber

Jak mogę uzyskać rownumber komórki w arkuszu danych, który pasuje do nazwiska pracownika?

Próbowałem następujący skrypt, ale nie wydaje się działać.

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; 

    } 

Odpowiedz

6

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

Gdy chcesz wykonać tego rodzaju odnośnika lepiej jest pobierać dane z sheet.getDataRange(). GetValues ​​(), ponieważ w tym przypadku dostaniesz dane jako tabela wartości jest to szybsze. Kiedy używasz standardowej EmployeeSheet.getRange (2,3,1,1) .getValue(), w rzeczywistości odzyskujesz obiekt, który potrzebuje więcej czasu na przetwarzanie i za każdym razem, gdy pytasz o arkusz kalkulacyjny.

W moim przykładzie wykonałem tylko jedno zapytanie, aby pobrać wszystkie dane zamiast zapytania, aby pobrać za każdym razem jedno dane.

Stéphane

+0

Występuje błąd: Errortype: Nie można odczytać atrybutu "1" z niezdefiniowanego. Czy wiesz, jak mogę to rozwiązać? – LennartB

+0

Skrypt musi zostać uruchomiony ze skryptu w arkuszu kalkulacyjnym, a nie samodzielnego skryptu. Jeśli samodzielna zmiana skryptu var sheet = SpreadsheetApp.openById ("IDofSpreadsheet"); – St3ph

+0

Przepraszamy var arkusz = SpreadsheetApp.openById ("IDofSpreadsheet"). GetSheetByName ("NameOfTheSheet"); – St3ph

Powiązane problemy