JavaScript — Как искать и фильтровать Google Лист на основе двух параметров в двух разных столбцах

Как искать и фильтровать Google Sheet по двум параметрам в двух разных столбцах

У меня есть лист с 46 столбцами и сколько будет неопределенное количество строк. Я ищу способ создания веб-приложения с простым пользовательским интерфейсом, который позволяет выполнять поиск по двум критериям и отфильтровывать все результаты, которые не соответствуют этому критерию. Первый — поиск по названию / emp #, который попадает в столбцы 3 и 4 соответственно. Другой поиск даты. Идея заключалась в том, что я могу искать все экземпляры имен или номеров этих людей, которые попадают в эту дату, и возвращать их в виде HTML-таблицы или некоторого аналогичного и разумно расположенного представления.

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

code.gs

 function doGet() { return HtmlService.createTemplateFromFile('index').evaluate(); } function getValuesFromSS(search) { var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1'); var lastRow = ss.getLastRow(); var range = ss.getRange(1,3,lastRow,2); //define range for column D var ranges = range.createTextFinder(search).findAll(); var names = ''; var nums = ''; var dates = ''; var urls = ''; //loop through each range for (i = 0; i {amp}lt; ranges.length; i  ) { var row = ranges[i].getRow(); var lastCol = ss.getLastColumn(); var values = ss.getRange(row, 1, 1, lastCol).getDisplayValues(); //get all values for the row var empname = values[0][2]; //column C var empnum = values[0][3]; //column D var date = values[0][4]; //column E var url = values[0][46]; names =Utilities.formatString("{amp}lt;td{amp}gt;"   empname   "{amp}lt;/td{amp}gt;"); nums =Utilities.formatString("{amp}lt;td{amp}gt;"   empnum   "{amp}lt;/td{amp}gt;"); dates =Utilities.formatString("{amp}lt;td{amp}gt;"   date   "{amp}lt;/td{amp}gt;"); urls =Utilities.formatString("{amp}lt;td{amp}gt;"   "{amp}lt;a href='https://drive.google.com/uc?export=view{amp}amp;id='"   url   "'{amp}gt;DVIR{amp}lt;/a{amp}gt;"   "{amp}lt;/td{amp}gt;"); } return { first: names, second: nums, third: dates, fourth: urls } } 

index.html

 {amp}lt;!DOCTYPE html{amp}gt; {amp}lt;html{amp}gt; {amp}lt;head{amp}gt; {amp}lt;script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"{amp}gt;{amp}lt;/script{amp}gt; {amp}lt;script type="text/javascript"{amp}gt; function setPageValues () { var search = document.getElementsByName('searchtext')[0].value; google.script.run.withSuccessHandler(disp).getValuesFromSS(search); } function disp(values){ document.getElementById("results1").innerHTML = values.first; document.getElementById("results2").innerHTML = values.second; document.getElementById("results3").innerHTML = values.third; document.getElementById("results4").innerHTML = values.fourth; } {amp}lt;/script{amp}gt; {amp}lt;/head{amp}gt; {amp}lt;style{amp}gt; table { border-collapse: collapse; } tr { display: block; float: left; } td { border: 1px solid Black; display: block; } {amp}lt;/style{amp}gt; {amp}lt;body{amp}gt; {amp}lt;input type="text" name="searchtext"{amp}gt; {amp}lt;input type="button" value="Search" onclick="setPageValues();"{amp}gt; {amp}lt;br{amp}gt; {amp}lt;div name="resultbox"{amp}gt; {amp}lt;table{amp}gt; {amp}lt;tr id="results1"{amp}gt; {amp}lt;/tr{amp}gt; {amp}lt;tr id="results2"{amp}gt; {amp}lt;/tr{amp}gt; {amp}lt;tr id="results3"{amp}gt; {amp}lt;/tr{amp}gt; {amp}lt;tr id="results4"{amp}gt; {amp}lt;/tr{amp}gt; {amp}lt;/table{amp}gt; {amp}lt;/div{amp}gt; {amp}lt;/body{amp}gt; {amp}lt;script{amp}gt; {amp}lt;/script{amp}gt; {amp}lt;/html{amp}gt; 

Вот пример ссылки на электронную таблицу: https://docs.google.com/spreadsheets/d/1scFOr4nUXwm7brvlMPHFJhyLei3TI-uvoOVugsx-TeA/edit?usp=sharing

Как я уже упоминал, я хочу найти имя -или в одном поле и дату в другом и отфильтровать только те результаты, которые соответствуют обоим для отображения в формате HTML. Спасибо!

Понравилась статья? Поделиться с друзьями:
JavaScript & TypeScript
Adblock
detector