Как вернуть сопоставленные данные строки по значению ключа в Google Sheets - PullRequest
1 голос
/ 04 ноября 2019

Я хотел бы добиться следующего с помощью Apps Script.:

1002 * У меня есть электронная таблица под названием "Тест". В «Тесте» есть 9 вкладок, но я хочу искать только в «sheet1», «sheet2», «sheet3».

1 Ответ

1 голос
/ 04 ноября 2019

Вы хотите найти название курса, которое часто встречается на любом из трех листов, а затем вернуть некоторые релевантные данные курса.

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

На этих изображениях показаны до и после:


Пустая форма поиска

Search Results blank


Заполненные результаты поиска

Search Results populated


Основы сценария:

  • создайте новый лист, назовите его «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])
  }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...