I'm going to build web to be used in search for label information My database is in Google Sheets, so I went looking for a Google Sheets fetch and gave it a try. I have no experience with Google App Scripts so I want to fill all and search data form database but it can run just one of them how to do it all (first is .gs second is Index.html) this is my reference.
- https://gist.github.com/neno-tech/15d9c3fe32a2d8896c1875b7a827a6e5
- https://docs.google.com/document/d/1EhzxSy-L5kBt5E-BA1B446G0OjQAuKqEgLUPpiZh3Pw/edit
This is my database : https://docs.google.com/spreadsheets/d/1j-r4gD1zV3e0yrNJTnHezXRlv1w-aOf6UqQs_P2jsRY/edit?usp=sharing
function doGet() {
return HtmlService.createTemplateFromFile('Index').evaluate()
.setTitle('System Search Lable')
.addMetaTag('viewport', 'width=device-width, inital-scale=1')
.setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL);
}
function processForm(formObject){
var concat = formObject.searchtext+formObject.searchtext2+formObject.searchtext3+formObject.searchtext4+formObject.searchtext5;
var result = "";
if(concat){
result = search(concat);
}
return result;
}
function search(searchtext){
var spreadsheetId = '1j-r4gD1zV3e0yrNJTnHezXRlv1w-aOf6UqQs_P2jsRY';
var dataRange = 'Master Barcode!A2:O10';
var data = Sheets.Spreadsheets.Values.get(spreadsheetId, dataRange).values;
var ar = [];
data.forEach(function(f) {
if (~f.toString().toLowerCase().indexOf(searchtext.toString().toLowerCase())) {
ar.push(f);
}
});
return ar;
}
!DOCTYPE html>
<html>
<head>
<base target="_top">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-giJF6kkoqNQ00vy+HMDP7azOuL0xtbfIcaT9wjKHr8RbDVddVHyTfAAsrekwKmP1" crossorigin="anonymous">
</head>
<body>
<div class="container">
<br>
<div class="row">
<div class="col">
<center><form id="search-form" onsubmit="handleFormSubmit(this)">
<div class="form-group mb-2">
<label for="searchtext">Search a Label</label>
</div><p>
<div class="col-md-6 mb-2">
<input type="text" class="form-control" id="searchtext" name="searchtext" placeholder="Category">
<br>
<input type="text" class="form-control" id="searchtext2" name="searchtext2" placeholder="Size">
<br>
<input type="text" class="form-control" id="searchtext3" name="searchtext3" placeholder="Brand">
<br>
<input type="text" class="form-control" id="searchtext4" name="searchtext4" placeholder="Color">
<br>
<input type="text" class="form-control" id="searchtext5" name="searchtext5" placeholder="Lenght">
<br>
</div><p>
<button id="search" type="submit" class="btn btn-success mb-2">Search</button>
<span id="spinner" class="spinner-border spinner-border-sm d-none" role="status" aria-hidden="true"></span>
</form>
</center>
</div>
</div>
<div class="row">
<div class="col">
<div id="search-results" class="table-responsive">
</div>
</div>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.5.4/dist/umd/popper.min.js" integrity="sha384-q2kxQ16AaE6UbzuKqyBE9/u/KzioAlnx2maXQHiDX9d4/zp8Ok3f+M7DPm+Ib6IU" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/js/bootstrap.min.js" integrity="sha384-pQQkAEnwaBkjpqZ8RU1fF1AKtTcHJwFl3pblpTlHXybJjHpMYo79HY3hIi4NKxyj" crossorigin="anonymous"></script>
<script>
function preventFormSubmit() {
var forms = document.querySelectorAll('form');
for (var i = 0; i < forms.length; i++) {
forms[i].addEventListener('submit', function(event) {
event.preventDefault();
});
}
}
window.addEventListener("load", preventFormSubmit, true);
function handleFormSubmit(formObject) {
document.getElementById('search').innerHTML = "Loading";
document.getElementById('spinner').classList.remove("d-none");
google.script.run.withSuccessHandler(createTable).processForm(formObject);
document.getElementById("search-form").reset();
}
function createTable(dataArray) {
document.getElementById('search').innerHTML = "Search";
document.getElementById('spinner').classList.add("d-none");
if(dataArray && dataArray !== undefined && dataArray.length != 0){
var result = "<table class='table table-sm table-striped' id='dtable' style='font-size:0.8em'>"+
"<thead style='white-space: nowrap'>"+
"<tr>"+
"<th scope='col'>Barcode</th>"+
"<th scope='col'>Brand</th>"+
"<th scope='col'>Standard</th>"+
"<th scope='col'>Year</th>"+
"<th scope='col'>Table</th>"+
"<th scope='col'>Type</th>"+
"<th scope='col'>Category</th>"+
"<th scope='col'>Coil</th>"+
"<th scope='col'>X</th>"+
"<th scope='col'>Size</th>"+
"<th scope='col'>Lenght</th>"+
"<th scope='col'>Weight</th>"+
"<th scope='col'>Color</th>"+
"<th scope='col'>Voltage</th>"+
"<th scope='col'>Size lable</th>"+
"</tr>"+
"</thead>";
for(var i=0; i<dataArray.length; i++) {
result += "<tr>";
for(var j=0; j<dataArray[i].length; j++){
result += "<td>"+dataArray[i][j]+"</td>";
}
result += "</tr>";
}
result += "</table>";
var div = document.getElementById('search-results');
div.innerHTML = result;
}else{
var div = document.getElementById('search-results');
div.innerHTML = "Data not found!";
}
}
</script>
</body>
</html>
The results are here is that I fill in only one field. What I mean is I filled out the required information into each field, however I would like to know a way to fill in all fields in order to make it easier to filter.
