我有一些根据用户在我的Web应用程序上选择的内容而创建的变量。我想将这些变量发送到Google工作表-这可能吗?我已经将数据从表单发送到Google表格。因为变量是在用户提交表单的同时创建的,所以我想将表单数据以及这些变量放入工作表中。
这是当前的js(为简洁起见,保留了html的形式):
$('#CompleteOrder').on('click', function(event){
event.preventDefault();
const scriptURL = 'https://script.google.com/macros/s/...................'
const form = document.forms['submit']
fetch(scriptURL, { method: 'POST', body: new FormData(form)})
.then(response => console.log('Success!', response))
.catch(error => console.error('Error!', error.message))
});
这是我要使用表单数据添加到Google工作表的变量的js:
var ti = 1;
$.each(products, function (i) {
var productID = Number(products[i]['id']);
var productImage = products[i]['image'];
var productColor = products[i]['color'];
var productSize = products[i]['size'];
var productName = products[i]['name'];
var productPrice = Number(products[i]['price']);
var productQty = Number(products[i]['qty']);
body = body + '<tr><td><span>' + productName + '</span></td><td><span>' + productColor + '</span></td><td><span>' + productSize + 'L</span></td><td><span data-prefix>$</span><span >' + productPrice + '</span></td><td><span>' + productQty + '</span></td><td><span data-prefix>$</span><span>' + (productPrice * productQty) + '</span></td></tr>';
total = total + (productPrice * productQty);
});
谢谢
编辑:
我遇到的问题是如何获取js变量并将其发送到Google工作表。该表格有效,那里没有问题。在不使用标签的情况下,如何将变量发送到工作表我什么也找不到。我什至一直在将对象转换为表单数据。而且没有关于如何将表单数据以及js变量发送到同一张纸的解释。
Form
<form name="submit">
<div class="form-group">
<label for="cus-name">Name</label>
<input type="text" name="name" class="form-control form-control" id="cus-name"></input>
</div>
<div class="form-group">
<label for="cus-address">Street Address</label>
<input type="text" name="address" class="form-control form-control" id="cus-address"></input>
</div>
<div class="form-group">
<label for="cus-city">City</label>
<input type="text" name="city" class="form-control form-control" id="cus-city"></input>
</div>
<div class="form-group">
<label for="cus-state">Province</label>
<input type="text" name="province" class="form-control form-control" id="cus-state"></input>
</div>
<div class="form-group">
<label for="cus-zipcode">Zipcode</label>
<input type="text" name="zip" class="form-control form-control" id="cus-zipcode"></input>
</div>
<div class="form-group">
<label for="cus-phone">Phone Number</label>
<input type="text" name="number" class="form-control form-control" id="cus-phone"></input>
</div>
<div class="form-group">
<label for="cus-email">Email Address</label>
<input type="email" name="email" class="form-control form-control" id="cus-email"></input>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-danger" data-dismiss="modal">Close</button>
<button type="submit" class="btn btn-success" id="CompleteOrder">Complete Order</button>
</div>
</form>
Google脚本
var sheetName = 'Sheet1'
var scriptProp = PropertiesService.getScriptProperties()
function intialSetup () {
var activeSpreadsheet = SpreadsheetApp.getActiveSpreadsheet()
scriptProp.setProperty('key', activeSpreadsheet.getId())
}
function doPost (e) {
var lock = LockService.getScriptLock()
lock.tryLock(10000)
try {
var doc = SpreadsheetApp.openById(scriptProp.getProperty('key'))
var sheet = doc.getSheetByName(sheetName)
var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0]
var nextRow = sheet.getLastRow() + 1
var newRow = headers.map(function(header) {
return header === 'timestamp' ? new Date() : e.parameter[header]
})
sheet.getRange(nextRow, 1, 1, newRow.length).setValues([newRow])
return ContentService
.createTextOutput(JSON.stringify({ 'result': 'success', 'row': nextRow }))
.setMimeType(ContentService.MimeType.JSON)
}
catch (e) {
return ContentService
.createTextOutput(JSON.stringify({ 'result': 'error', 'error': e }))
.setMimeType(ContentService.MimeType.JSON)
}
finally {
lock.releaseLock()
}
}
答案 0 :(得分:2)
您问题的核心似乎是
如何创建fetch()的body参数,使其既包含表单数据对象又包含JavaScript变量中的其他值。
新的FormData(form)返回一个FormData对象。
要向现有FormData中添加HTML表单中未包含的值,请使用FormData.append()
将上述内容应用于代码以添加一个值的一种方法是替换
fetch(scriptURL, { method: 'POST', body: new FormData(form)})
.then(response => console.log('Success!', response))
.catch(error => console.error('Error!', error.message))
通过类似的方式
var something = 'New value';
var fetchBody = new FormData(form);
fetchBody.append('newKey',something);
fetch(scriptURL, { method: 'POST', body: fetchBody})
.then(response => console.log('Success!', response))
.catch(error => console.error('Error!', error.message))
要添加更多变量,请根据需要添加更多fetchBody.append()。
注意:我尚未测试以上内容。
相关问题
参考
答案 1 :(得分:0)
虽然可以使用doPost函数,但如HTML Service: Communicate with Server Functions上所建议的那样,使用google.script.run从附加到Google电子表格的有界脚本中发送数据会更加方便。
相关