Поиск в таблице по столбцу, возврат строк

Я пытаюсь найти лучший сценарий с точки зрения времени выполнения, чтобы выполнить задачу. У меня есть довольно большая электронная таблица, где мне нужно проверить значения в определенных известных столбцах, и в зависимости от случая совпадения она возвращает эту строку. В идеале я хотел бы новую электронную таблицу, содержащую возвращенные строки.

У меня есть электронная таблица, открытая по ID, и у меня есть таблица и диапазон, но я не уверен, что это самый эффективный способ поиска по определенным столбцам и получения не только этого значения, но и всей строки.

Ответ 1

Вы можете использовать приведенный ниже код для поиска в определенном столбце. Код является самоочевидным.

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

Возможно, вы захотите использовать класс textFinder скрипта Google Apps.

В этом примере функция будет искать строку и показывать строку первого вхождения в диалоговом окне предупреждения:

function searchString(){
  var sheet = SpreadsheetApp.getActiveSheet()
  var search_string = "dog"
  var textFinder = sheet.createTextFinder(search_string)
  var search_row = textFinder.findNext().getRow()
  var ui = SpreadsheetApp.getUi();
  ui.alert("search row: " + search_row)
}

Ответ 3

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

Сделал небольшие изменения в ответе на поиск встроенного текста.

Ответ 4

Мой поиск script на GitHub

Обычаи:

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

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

Параметры Объяснение:

- "Search_Key" - может быть строкой, массивом или регулярным выражением для одновременного поиска нескольких вещей.

- "RefSheetRange" - справочный источник информации. Может быть локальным справочным листом и диапазоном или массивом данных из переменной.

- "SearchKey_RefMatch_IndexOffSet" - какой столбец информации вы ссылаетесь на "Search_Key" на данные "RefSheetRange".

- "IndexOffSetForReturn" - после того, как найдено совпадение "Search_Key" , какие столбцы данных будут возвращены из "RefSheetRange".

- "SetSheetRange" - где вы собираетесь поместить выбранную информацию из "RefSheetRange", которая соответствует "Search_Key" , или вы можете использовать "return", и когда функция завершится, она вернется, чтобы вы могли вывести функцию переменной.

- "ReturnMultiResults" - если "Y" говорит, что "Search_Key" - "NW", и вы хотите найти каждый магазин в цепочке, которая попадает под северо-запад в ваш набор данных. Таким образом, объявив, что "Y" не остановится после того, как он найдет первое совпадение, он будет продолжать поиск оставшихся данных.

- "Add_Note" - если "Y" вы устанавливаете результаты в электронную таблицу и не возвращаете ее в память, тогда она установит первую ячейку в "SetSheetRange" с записью того, что и когда.

- "Has_NAs" - если "Y" будет помещен в "# N/A" в столбец, где он не нашел данные для "Search_Key" другим, он оставит пустой столбец.