Вы хотите найти название курса, которое часто встречается на любом из трех листов, а затем вернуть некоторые релевантные данные курса.
Вы описали динамический ввод данных на основе интерфейса пользователя и формат отчетности. Я оставлю это для вас, чтобы развиваться. Этот ответ использовал очень простую форму поиска на листе поиска. Есть ячейка для ввода поискового запроса и пробел для отображения результатов.
На этих изображениях показаны до и после:
Пустая форма поиска
Заполненные результаты поиска
Основы сценария:
- создайте новый лист, назовите его «search» и создайте заголовки в соответствии с изображением: поисковый термин помещается в ячейку B2;заголовки результатов поиска идут в строке 6 (результаты появятся в строке 7).
- имена листов, содержащие данные курса, перечислены в массиве:
var datasheets = ["Sheet1","Sheet2","Sheet3"];
- , сценарий проходит по циклутехнические данные:
var sheet = ss.getSheetByName(datasheets[d]);
- данные на каждом листе получены:
var data = sheet.getRange(startrow,1,LR-startrow+1,5).getValues();
- с использованием метода Javascript MAP , устанавливается массив курсов:
var courses = data.map(function(e){return e[0];});//[[e],[e],[e]]=>[e,e,e]
- , используя метод Javascript indexOf , скрипт ищет поисковый термин в массиве курсов:
var result = courses.indexOf(searchdata);
- , когда совпадение найдено, значениядля имени курса, имени листа, статуса, владельца и идентификатора извлекаются и помещаются в массив: например,
searchresults.push(data[result][3]);// ID
- результаты поиска обновляются с результатами массива
- есть проверка наустановить, был ли найден поисковый термин:
if (resultcounter ==0){
- , если нет, то в результатах поиска отобразится «Нет совпадений»:
searchresults.push("No matches"); // message
function so5868680301() {
var ss = SpreadsheetApp.getActiveSpreadsheet()
// define the search sheet
var sheetname= "search";
var searchsheet = ss.getSheetByName(sheetname);
// get the search term
var searchdata = searchsheet.getRange("B2").getValue();
//Logger.log(searchdata);//DEBUG
// define the search results output range
var searchoutput = searchsheet.getRange(7,1,1,5);
// clear the search results
searchoutput.clearContent();
// the sheets to be searched
var datasheets = ["Sheet1","Sheet2","Sheet3"]
//Logger.log(datasheets.length);// DEBUG
// the start row on the data sheets
var startrow = 5;
var resultcounter = 0;
// loop through the sheets
for (var d =0;d<datasheets.length;d++){
var sheet = ss.getSheetByName(datasheets[d]);
//Logger.log(sheet.getName());// DEBUG
// get the Last row on this sheet
var LR = sheet.getLastRow();
// define a range for the sheet
var data = sheet.getRange(startrow,1,LR-startrow+1,5).getValues();
//Logger.log(data);//DEBUG
// get the course list in column A as a separate array
var courses = data.map(function(e){return e[0];});//[[e],[e],[e]]=>[e,e,e]
// search the courses array for the serachterm
var result = courses.indexOf(searchdata);
// if the result is -1, then the sraech term couldn't be found,
// otherwise the result is the instance number in the courses array
if (result !=-1){
Logger.log(courses); //DEBUG
Logger.log(result); //DEBUG
// create an empty array
var searchresults=[];
//push the search results onto the array.
//sheet name
searchresults.push(courses[result]);// course name
searchresults.push(sheet.getName());// sheet name
searchresults.push(data[result][1]);// status
searchresults.push(data[result][2]);// owner
searchresults.push(data[result][3]);// ID
//Logger.log(searchresults);//DEBUG
searchoutput.setValues([searchresults])
resultcounter = resultcounter +1;
}
}
if (resultcounter ==0){
var searchresults=[];
searchresults.push("No matches"); // message
searchresults.push("");
searchresults.push("");
searchresults.push("");
searchresults.push("");
//Logger.log(searchresults);//DEBUG
searchoutput.setValues([searchresults])
}
}