JS извлекает отфильтрованные данные в скрипте таблицы Google

У меня есть HTML-форма, которая получает данные из таблицы Google. Чтобы получить ВСЕ записи в листе, я использую следующий код.

Сейчас я пытаюсь добавить код для фильтрации данных -

(1) получить ТОЛЬКО ОДНУ строку, в которой столбец А соответствует некоторым критериям Бывший. Получить данные из строки, где столбец A = "123" ... столбец A имеет уникальный идентификатор.

(2) получить только те строки, в которых столбец F пуст

Пожалуйста помоги...

 function read_value(request,ss){

 var output  = ContentService.createTextOutput(),
 data    = {};

  var sheet = "sheet1";

data.records = readData_(ss, sheet);

 var callback = request.parameters.callback;

 if (callback === undefined) {
 output.setContent(JSON.stringify(data));
 } else {
 output.setContent(callback + "(" + JSON.stringify(data) + ")");
      }
 output.setMimeType(ContentService.MimeType.JAVASCRIPT);

  return output;
      }


 function readData_(ss, sheetname, properties) {

 if (typeof properties == "undefined") {
 properties = getHeaderRow_(ss, sheetname);
 properties = properties.map(function(p) { return p.replace(/\s+/g, '_'); });
 }

var rows = getDataRows_(ss, sheetname),
data = [];

for (var r = 0, l = rows.length; r < l; r++) {
var row     = rows[r],
record  = {};

for (var p in properties) {
record[properties[p]] = row[p];
}

data.push(record);

 }
return data;
 }

function getDataRows_(ss, sheetname) {
var sh = ss.getSheetByName(sheetname);

return sh.getRange(2, 1, sh.getLastRow() -1,sh.getLastColumn()).getValues();

 }



function getHeaderRow_(ss, sheetname) {
var sh = ss.getSheetByName(sheetname);

return sh.getRange(1, 1, 1, sh.getLastColumn()).getValues()[0];  
} 
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
208
1

Ответы 1

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

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

Скрипт Google Apps:

function getMyData(dObj) {//function called from html in with window.onload
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName(dObj.sheetname);
  var rg=sh.getDataRange();
  var vA=rg.getValues();
  var hl='<table>';
  for(var i=0;i<vA.length;i++) {
    if (vA[i][0]==dObj.colACriteria){//you can put your filtering criteria here
      hl+='<tr>';
      for(var j=0;j<vA[i].length;j++) {
        hl+=Utilities.formatString('<td>%s</td>', vA[i][j]);
      }
      hl+='</tr>';
    }
  }
  hl+='</table>';
  return hl;
}

function showGetMyDataDialog() {//this launches the html as a modeless dialog
  var ui=HtmlService.createHtmlOutputFromFile('getdata').setTitle('My Data');
  SpreadsheetApp.getUi().showModelessDialog(ui, 'Get My Data');
}

а вот HTML-код:

<!DOCTYPE html>
<html>
  <head>
    <base target = "_top">
  </head>
  <script>
   window.onload=function(){
    var dObj = {sheetname:'Index',colACriteria:'123'};
    google.script.run
    .withSuccessHandler(function(hl){//this is the call back function that put the data into a div
      document.getElementById('mydata').innerHTML=hl;
    })
    .getMyData(dObj);
  };

  </script>
  <body>
    <div id = "mydata"></div>
  </body>
</html>

Привет, спасибо за это - я уже получил Все данные в моем коде - мне нужно отфильтровать данные на основе критериев, как в (1) и (2) в исходном посте.

JS Learner 27.10.2018 07:56

Я добавил код в функцию getMyData(), где я выполнял фильтрацию. Вероятно, вы можете передать такой объект, как var dObj = {sheetname:'Index', colACritera:'some value'};. В параметрах, которые вы можете передать при взаимодействии клиента с сервером, есть ограничения.

Cooper 27.10.2018 08:08

Другие вопросы по теме