9

Tôi đang cố gắng tìm tập lệnh tốt nhất về thời gian chạy để hoàn thành tác vụ. Tôi có một bảng tính khá lớn, nơi tôi cần kiểm tra các giá trị trong một số cột đã biết và tùy thuộc vào trường hợp trùng khớp mà nó trả về hàng đó. Lý tưởng nhất là tôi muốn một bảng tính mới chứa các hàng trả về.Bảng tính tìm kiếm tập lệnh Google theo cột, trả về hàng

Tôi đã mở bảng tính bằng ID và tôi đã có phạm vi trang &, nhưng không chắc chắn cách hiệu quả nhất để tìm kiếm thông qua các cột cụ thể và không chỉ lấy giá trị đó mà toàn bộ hàng.

Xin cảm ơn,

+0

Mã nói to hơn từ. Bạn có thể đăng mã mà bạn có? Nếu bạn đã viết một cái gì đó để bắt đầu, chúng tôi có thể giúp với sự tối ưu hóa – Srik

+0

cảm ơn, câu hỏi của bạn dẫn tôi đến trả lời vấn đề của tôi .. :) –

Trả lời

29

Bạn có thể sử dụng mã bên dưới để tìm kiếm trong một cột cụ thể. Mã là tự giải thích.

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

Bạn có thể làm sáng tỏ nơi tìm hàm "findIndex" không? Không thể thấy chức năng này trong tài liệu chính thức – matcheek

+1

Tôi đã cập nhật mã với findIndex. –

+0

Cảm ơn tuyệt vời. – 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; 
} 

Thực hiện một số thay đổi nhỏ để câu trả lời để tìm kiếm văn bản nội tuyến.

0

My lookup script on GitHub

Công dụng:

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");

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

thông số Giải thích:

- "SEARCH_KEY" - có thể là một chuỗi, mảng, hoặc regex để tra cứu nhiều mọi thứ cùng một lúc

- "RefSheetRange" - Nguồn tham khảo thông tin. Có thể là tham chiếu và phạm vi của trang tính cục bộ hoặc một mảng dữ liệu từ một biến.

- "SearchKey_RefMatch_IndexOffSet" - Cột thông tin bạn đang tham chiếu đến 'Search_Key' cho dữ liệu 'RefSheetRange'.

- "IndexOffSetForReturn" - Khi kết quả 'Tìm kiếm_Key' được tìm thấy, các cột dữ liệu sẽ được trả về từ 'RefSheetRange'.

- "SetSheetRange" - Bạn sẽ đặt thông tin được chọn từ 'RefSheetRange' khớp với 'Search_Key' HOẶC bạn có thể sử dụng 'return' và khi hàm kết thúc nó sẽ quay trở lại để bạn có thể xuất hàm thành biến.

- "ReturnMultiResults" - Nếu 'Y' Giả sử bạn 'Search_Key' là 'NW' và bạn muốn tìm mọi cửa hàng trong chuỗi nằm dưới phía tây bắc trong tập dữ liệu của bạn. Vì vậy, tuyên bố 'Y' sẽ không dừng lại sau khi nó tìm thấy kết quả đầu tiên nó sẽ tiếp tục tìm kiếm thông qua phần còn lại của dữ liệu.

- "Add_Note" - Nếu 'Y' bạn đang đặt kết quả vào bảng tính và không trả về bảng tính thì bộ nhớ sẽ đặt ô đầu tiên trong 'SetSheetRange' với ghi chú về thời điểm và thời điểm.

- "Has_NAs" - Nếu 'Y', cột sẽ được đặt trong cột '# N/A', nơi cột không tìm thấy dữ liệu cho 'Search_Key' khác khôn ngoan, nó sẽ để trống cột.