9

Próbuję znaleźć najlepszy skrypt pod względem środowiska wykonawczego, aby ukończyć zadanie. Mam przyzwoicie duży arkusz kalkulacyjny, w którym muszę sprawdzić wartości w niektórych znanych kolumnach, a w zależności od przypadku dopasowania zwraca ten wiersz. Idealnie chciałbym nowy arkusz kalkulacyjny zawierający zwrócone wiersze.Skrypty Google wyszukują arkusz kalkulacyjny według kolumny, zwracają wiersze

Mam arkusz kalkulacyjny otwarty przez ID i mam arkusz & zakresu, ale nie jestem pewien, najefektywniejszy sposób, aby przeszukać konkretne kolumny i chwytając nie tylko tę wartość, ale cały wiersz.

Dzięki,

+0

Kod mówi głośniej niż słowa. Czy możesz opublikować swój kod? Jeśli napisałeś coś na początek, możemy pomóc w optymalizacji – Srik

+0

dzięki, twoje pytanie doprowadziło mnie do odpowiedzi na mój problem .. :) –

Odpowiedz

29

Można użyć kodu poniżej, aby szukać w określonej kolumnie. Kod jest oczywisty.

function onOpen() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var menuEntries = [ {name: "Search", functionName: "onSearch"} ]; 
    ss.addMenu("Commands", menuEntries);  
} 

function onSearch() 
{ 
    var searchString = "Test11"; 
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("SheetName"); 
    var column =4; //column Index 
    var columnValues = sheet.getRange(2, column, sheet.getLastRow()).getValues(); //1st is header row 
    var searchResult = columnValues.findIndex(searchString); //Row Index - 2 

    if(searchResult != -1) 
    { 
     //searchResult + 2 is row index. 
     SpreadsheetApp.getActiveSpreadsheet().setActiveRange(sheet.getRange(searchResult + 2, 1)) 
    } 
} 

Array.prototype.findIndex = function(search){ 
    if(search == "") return false; 
    for (var i=0; i<this.length; i++) 
    if (this[i] == search) return i; 

    return -1; 
} 
+2

Czy możesz rzucić trochę światła na to, gdzie znaleźć funkcję "findIndex"? Nie widzę tej funkcji w oficjalnej dokumentacji – matcheek

+1

Mam zaktualizowany kod za pomocą findIndex. –

+0

Niesamowite dzięki. – matcheek

-1
function onSearch() 
{ 
    var searchString = "SD0023"; 
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Form Responses 1"); 
    var column =1; //column Index 
    var columnValues = sheet.getRange(2, column, sheet.getLastRow()).getValues(); //1st is header row 
    var searchResult = columnValues.findIndex(searchString); //Row Index - 2 

    if(searchResult != -1) 
    { 
     //searchResult + 2 is row index. 
     SpreadsheetApp.getActiveSpreadsheet().setActiveRange(sheet.getRange(searchResult + 2, 3)).setValue("found here"); 
    } 
} 

Array.prototype.findIndex = function(search){ 
    if(search == "") return false; 
    for (var i=0; i<this.length; i++) 
    if (this[i].toString().indexOf(search) > -1) return i; 

    return -1; 
} 

Wprowadzono kilka drobnych zmian do odpowiedzi do wyszukiwania tekstu inline.

0

My lookup script on GitHub

Usages:

Lookup_(SheetinfoArray,"Sheet1!A:B",0,[1],"Sheet1!I1","n","y","n");

Lookup_(Sheetinfo,"Sheet1!A:B",0,[1],"return","n","n","y");

Lookup_(SheetinfoArray,"Sheet1!A:B",0,[0,1],"return","n","n","y");

Lookup_(Sheetinfo,"Sheet1!A:B",1,[1,3,0,2],"return","y","n","n");

Lookup_("female","Sheet1!A:G",4,[2],"Database!A1","y","y","y");

Lookup_(Sheetinfo,LocationsArr,4,[0],"return","y","n","y");

Lookup_(/RegEx+/i,LocationsArr,4,[0],"return","y","n","y");

////////////////////////////////// /////////////////////

Parametry wyjaśnieniu:

- "szukany_klucz" - może być być ciągiem, tablica lub regex do wyszukiwania wielokrotność rzeczy na raz:

- "RefSheetRange" - referencyjne źródło informacji. Może to być lokalne odniesienie do arkusza i zakres lub tablica danych ze zmiennej.

- "SearchKey_RefMatch_IndexOffSet" - Jaka kolumna informacji, do której odwołujesz się "Search_Key" do danych "RefSheetRange".

- "IndexOffSetForReturn" - Po znalezieniu klucza "Search_Key" kolumny, które zostaną zwrócone z "RefSheetRange".

- "SetSheetRange" - Gdzie zamierzasz wstawić wybrane informacje z "RefSheetRange", które pasują do "Search_Key" LUB możesz użyć "return" i kiedy funkcja się zakończy, to powróci, abyś mógł wypisać funkcję do zmienna.

- "ReturnMultiResults" - Jeśli "Y" Powiedz, że "Search_Key" to "NW" i chcesz znaleźć każdy sklep w łańcuchu, który znajduje się w Twoim zestawie danych w obszarze północno-zachodnim. Tak więc deklarowanie "Y" nie zatrzyma się po znalezieniu pierwszego dopasowania, więc będzie przeszukiwać resztę danych.

- "Add_Note" - Jeśli "Y" ustawiasz wyniki na arkusz kalkulacyjny i nie zwracasz go do pamięci, to ustawi pierwszą komórkę w "SetSheetRange" z notatką o tym, co i kiedy.

- "Has_NAs" - Jeśli "Y" wstawi w "# N/A" kolumnę, w której nie znalazło danych dla "Search_Key", w przeciwnym razie pozostawi kolumnę pustą.

Powiązane problemy