У меня есть 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];
}
Я не знаю, как ответить на ваш вопрос, кроме как дать вам пример, который получает все данные с заданного листа в электронной таблице, возвращает их на страницу 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>
Я добавил код в функцию getMyData()
, где я выполнял фильтрацию. Вероятно, вы можете передать такой объект, как var dObj = {sheetname:'Index', colACritera:'some value'};
. В параметрах, которые вы можете передать при взаимодействии клиента с сервером, есть ограничения.
Привет, спасибо за это - я уже получил Все данные в моем коде - мне нужно отфильтровать данные на основе критериев, как в (1) и (2) в исходном посте.