我设法制作了一个Google脚本函数,该函数从Google表格列创建一个数组,以过滤掉所有空格。但是,我不确定如何将此变量传递到HTML表单,以便创建自动完成选项列表。
用户将向电子表格添加内容,因此该列表必须是动态的,以随电子表格一起增长。表单用户应该能够使用自动完成功能键入内容,或者从电子表格数组中随时间变化的项目列表中滚动。
编辑:抱歉,由于没有显示足够的代码而造成的任何混乱。基本上,我试图在readData()中获取数组,以将其转换为类似html的格式
<datalist id="datalist">
<option value="Plain#1">
<option value="Plain#2">
<option value="Plain#3">
<option value="Plain#4">
<option value="Plain#5">
<option value="Plain#6">
</datalist>
代码如下:
这是我的JS
<script>
// Prevent forms from submitting.
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);
function handleFormSubmit(formObject) {
google.script.run.processForm(formObject);
document.getElementById("myForm").reset();
}
</script>
这是我的GS
function readData() {
var url = "https://docs.google.com/spreadsheets/d/1ftdM8esHXRbdNbN0I00GSMPj5ZiCcPo9cs_9dAjFldc/edit#gid=540792552;"
var ss = SpreadsheetApp.openByUrl(url);
var ws = ss.getSheetByName("Bags Inventory");
var rng = ws.getRange(2,2,350,1)
var rangeArray = rng.getValues();
var filArray = rangeArray.filter(function (el) {
return el != "";
});
return(filArray);
}
function doGet(request) {
return HtmlService.createTemplateFromFile('Index').evaluate();
}
/* @Include JavaScript and CSS Files */
function include(filename) {
return HtmlService.createHtmlOutputFromFile(filename)
.getContent();
}
/* @Process Form */
function processForm(formObject) {
var url = "https://docs.google.com/spreadsheets/d/1PRS5O42_vAwEqLFjULu-SyPvzSR902tu9xMXA88WnWM/edit#gid=73972270;"
var ss = SpreadsheetApp.openByUrl(url);
var ws = ss.getSheetByName("Data");
ws.appendRow([
new Date(),
Session.getActiveUser().getEmail(),
formObject.item1,
formObject.amount1,
formObject.item2,
formObject.amount2,
formObject.item3,
formObject.amount3,
formObject.item4,
formObject.amount4,
formObject.item5,
formObject.amount5,
formObject.item6,
formObject.amount6,
formObject.item7,
formObject.amount7,
formObject.item8,
formObject.amount8,
formObject.item9,
formObject.amount9,
formObject.item10,
formObject.amount10,
formObject.client]);
}
这是我的HTML
<!DOCTYPE html>
<html>
<head>
<base target="_top">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
<style>
::placeholder{
color: #D3D3D3 !important;
}
</style>
<?!= include('JavaScript');
var options = readData();
?>
</head>
<body>
<div class="container">
<div class="row">
<div class="col-6">
<form id="myForm" onsubmit="handleFormSubmit(this)">
<p class="h4 mb-4 text-center">Paper Bag Inventory</p>
<div class="form-row">
<div class="form-group col-md-6">
<label for="item1">Item Code</label>
<input type="text" class="form-control" id="item1" name="item1" placeholder="Item #1" list="datalist" required>
</div>
<div class="form-group col-md-6">
<label for="amount1">Amount</label>
<input type="text" class="form-control" id="amount1" name="amount1" placeholder="Amount" required>
</div>
</div>
<div class="form-row">
<div class="form-group col-md-6">
<input type="text" class="form-control" id="item2" name="item2" placeholder="Item #2" list="datalist">
</div>
<div class="form-group col-md-6">
<input type="text" class="form-control" id="amount2" name="amount2" placeholder="Amount">
</div>
</div>
<div class="form-row">
<div class="form-group col-md-6">
<input type="text" class="form-control" id="item3" name="item3" placeholder="Item #3" list="datalist">
</div>
<div class="form-group col-md-6">
<input type="text" class="form-control" id="amount3" name="amount3" placeholder="Amount">
</div>
</div>
<div class="form-row">
<div class="form-group col-md-6">
<input type="text" class="form-control" id="item4" name="item4" placeholder="Item #4" list="datalist">
</div>
<div class="form-group col-md-6">
<input type="text" class="form-control" id="amount4" name="amount4" placeholder="Amount">
</div>
</div>
<div class="form-row">
<div class="form-group col-md-6">
<input type="text" class="form-control" id="item5" name="item5" placeholder="Item #5" list="datalist">
</div>
<div class="form-group col-md-6">
<input type="text" class="form-control" id="amount5" name="amount5" placeholder="Amount">
</div>
</div>
<div class="form-row">
<div class="form-group col-md-6">
<input type="text" class="form-control" id="item6" name="item6" placeholder="Item #6" list="datalist">
</div>
<div class="form-group col-md-6">
<input type="text" class="form-control" id="amount6" name="amount6" placeholder="Amount">
</div>
</div>
<div class="form-row">
<div class="form-group col-md-6">
<input type="text" class="form-control" id="item7" name="item7" placeholder="Item #7" list="datalist">
</div>
<div class="form-group col-md-6">
<input type="text" class="form-control" id="amount7" name="amount7" placeholder="Amount">
</div>
</div>
<div class="form-row">
<div class="form-group col-md-6">
<input type="text" class="form-control" id="item8" name="item8" placeholder="Item #8" list="datalist">
</div>
<div class="form-group col-md-6">
<input type="text" class="form-control" id="amount8" name="amount8" placeholder="Amount">
</div>
</div>
<div class="form-row">
<div class="form-group col-md-6">
<input type="text" class="form-control" id="item9" name="item9" placeholder="Item #9" list="datalist">
</div>
<div class="form-group col-md-6">
<input type="text" class="form-control" id="amount9" name="amount9" placeholder="Amount">
</div>
</div>
<div class="form-row">
<div class="form-group col-md-6">
<input type="text" class="form-control" id="item10" name="item10" placeholder="Item #10" list="datalist">
</div>
<div class="form-group col-md-6">
<input type="text" class="form-control" id="amount10" name="amount10" placeholder="Amount">
</div>
</div>
<div class="form-row">
<div class="form-group col-md-6">
<input type="text" class="form-control" id="client" name="client" placeholder="Client Name" required>
</div>
</div>
<button type="submit" class="btn btn-primary btn-block">Submit</button>
</form>
<div id="output"></div>
</div>
</div>
</div>
</body>
</html>
<datalist id="datalist">
<script type="text/javascript">
// my attempt to call gs function
var mylist = readData()
var options = '';
for(var i = 0; i < mylist.length; i++)
options += '<option value="'+mylist[i]+'" />';
document.getElementById('datalist').innerHTML = options;
</script>
</datalist>
我想提出以下修改。
readData()
Google Apps脚本返回1维数组。当以上几点反映到您的脚本时,它将变为以下内容。
function readData() {
var url = "https://docs.google.com/spreadsheets/d/1ftdM8esHXRbdNbN0I00GSMPj5ZiCcPo9cs_9dAjFldc/edit#gid=540792552;"
var ss = SpreadsheetApp.openByUrl(url);
var ws = ss.getSheetByName("Bags Inventory");
var rng = ws.getRange(2,2,350,1)
var rangeArray = rng.getValues();
var filArray = rangeArray.filter(function (el) {return el[0] != ""}).flat(); // Modified
return filArray;
}
而且,不幸的是,我无法理解您所处情况下使用HTML的方法。因此,如果您将脚本用作Web应用程序,请进行如下修改。
function doGet() {
var html = HtmlService.createTemplateFromFile("index");
html.data = readData();
return html.evaluate();
}
如果您使用侧边栏,请使用它。
var html = HtmlService.createTemplateFromFile("index");
html.data = readData();
SpreadsheetApp.getUi().showSidebar(html.evaluate());
如果使用对话框,请使用此对话框。
var html = HtmlService.createTemplateFromFile("index");
html.data = readData();
SpreadsheetApp.getUi().showModalDialog(html.evaluate(), "sample");
<datalist id="datalist"></datalist>
至:
<datalist id="datalist">
<? for (var i = 0; i < data.length; i++) { ?>
<option value="<?= data[i] ?>">
<? } ?>
</datalist>
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句