Google scripts поиск электронных таблиц по столбцам, возврат строк
Я пытаюсь найти лучший сценарий с точки зрения времени выполнения для выполнения задачи. У меня есть прилично большая электронная таблица, где мне нужно проверить значения в определенных известных Столбцах, и в зависимости от случая совпадения она возвращает эту строку. В идеале мне нужна новая электронная таблица, содержащая возвращенные строки.
У меня есть электронная таблица, открытая ID, и у меня есть sheet & range, но не уверен, что самый эффективный способ поиска по конкретным столбцам и захвата не только этого значения, но и всего ряд.
Спасибо,
3 ответа:
Вы можете использовать приведенный ниже код для поиска в определенном столбце. Код не требует пояснений.
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; }
Обычаи:
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', то он оставит столбец пустым.
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; }
Внес некоторые небольшие изменения в ответ для поиска встроенного текста.