html 表单未写入 google sheet
html form not writing to google sheet
我是编码和 Stack Overflow 的新手,如果我没有遵循协议或重复问题,我深表歉意。我确实检查了问题,但以我有限的知识没有找到足够接近的问题。
我从网页 Original code is here 复制了一些代码并对其进行了修改以适合我的 Google sheet & html 表格,但我有点卡住了。我已经打开了查看权限,这样您就可以看到我正在尝试做什么,但是我无法添加另一个 link,因为我还没有足够的声誉!
我已经创建了表单,它出现在网站上。如果我从 Code.gs 页面获得代码 运行,它会在每个有 header 的单元格中尽可能多地工作 post "undefined"。但是从网站上的表格来看,什么也没有发生。如果我 "test web app for your latest code" 和 F12 我会收到通知 "cannot read property of 'getpubliclock'"。如果我注释掉 public 锁定行,我会收到通知“无法读取 'createTextOutput' 的 属性。
我的 Code.gs 文件是:
function doGet(e) {
return HtmlService.createTemplateFromFile('myForm')
.evaluate()
.setTitle('eCPC DB v2.0')
.setSandboxMode(HtmlService.SandboxMode.NATIVE);
};
和myForm.html是:
<div>
<!-- Use a templated HTML printing scriptlet to import common stylesheet. -->
<?!= HtmlService.createHtmlOutputFromFile('Stylesheet').getContent(); ?>
<form>
<input type="text" name="FIRSTNAME" id="FIRSTNAME" class="form-control" placeholder="First Name" required>
<input type="text" name="LASTNAME" id="LASTNAME" class="form-control" placeholder="Last Name" required>
<input type="text" name="DRIVERNUMBER" id="DRIVERNUMBER" class="form-control" placeholder="Driving Licence Number" required>
<input type="email" name="EMAILADDRESS" id="EMAILADDRESS" class="form-control" placeholder="Email Address">
<input type="text" name="CONTACTNUMBER" id="CONTACTNUMBER" class="form-control" placeholder="Telephone Number">
<BR><BR>
<input type="submit" id="submit-btn" value="send" onclick=doPost() class="blue">
</form>
<script>
function doPost(e){
return handleResponse(e);
}
function handleResponse(e) {
var lock = LockService.getPublicLock();
lock.waitLock(30000);
try {
var doc = SpreadsheetApp.openById("1bEJwGt5ixDjvIUH56jcNB5j71rSetrVcvtrjMQCrVp4");
var sheet = doc.getSheetByName("DRV");
var headRow = e.parameter.header_row || 1;
var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0];
var nextRow = sheet.getLastRow()+1;
var row = [];
for (i in headers){
if (headers[i] == "Timestamp"){
row.push(new Date());
} else {
row.push(e.parameter[headers[i]]);
}
}
sheet.getRange(nextRow, 1, 1, row.length).setValues([row]);
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();
}
}
function setup() {
var doc = SpreadsheetApp.getActiveSpreadsheet();
SCRIPT_PROP.setProperty("key", doc.getId());
}
</script>
我已经尝试 运行从 Code.gs 文件中获取所有代码,并且我已经在 myForm.html 文件的标签中 运行 获取所有代码,但都没有做任何事。任何人都可以告诉我我做错了什么或指出一个 html 表单的示例,该表单写入 Google spreadsheet 可以工作所以我可以在我失败的地方?
谢谢!
不要在 myForm.html 文件中使用 doPost(e)
。您必须使用:
google.script.run.someFunctionNameHere();
调用 .gs
文件中的函数。 handleResponse(e)
函数也必须在 .gs
文件中。
您可能根本不需要使用 doPost(e)
。仅当首次使用 HTTPS POST 请求调用脚本时才会调用它。您不需要 POST 请求将表单输入值发送到服务器。您只需要 .gs
文件中的一个函数来接收参数中的数据。
确保查看表单文档:
我是编码和 Stack Overflow 的新手,如果我没有遵循协议或重复问题,我深表歉意。我确实检查了问题,但以我有限的知识没有找到足够接近的问题。
我从网页 Original code is here 复制了一些代码并对其进行了修改以适合我的 Google sheet & html 表格,但我有点卡住了。我已经打开了查看权限,这样您就可以看到我正在尝试做什么,但是我无法添加另一个 link,因为我还没有足够的声誉!
我已经创建了表单,它出现在网站上。如果我从 Code.gs 页面获得代码 运行,它会在每个有 header 的单元格中尽可能多地工作 post "undefined"。但是从网站上的表格来看,什么也没有发生。如果我 "test web app for your latest code" 和 F12 我会收到通知 "cannot read property of 'getpubliclock'"。如果我注释掉 public 锁定行,我会收到通知“无法读取 'createTextOutput' 的 属性。
我的 Code.gs 文件是:
function doGet(e) {
return HtmlService.createTemplateFromFile('myForm')
.evaluate()
.setTitle('eCPC DB v2.0')
.setSandboxMode(HtmlService.SandboxMode.NATIVE);
};
和myForm.html是:
<div>
<!-- Use a templated HTML printing scriptlet to import common stylesheet. -->
<?!= HtmlService.createHtmlOutputFromFile('Stylesheet').getContent(); ?>
<form>
<input type="text" name="FIRSTNAME" id="FIRSTNAME" class="form-control" placeholder="First Name" required>
<input type="text" name="LASTNAME" id="LASTNAME" class="form-control" placeholder="Last Name" required>
<input type="text" name="DRIVERNUMBER" id="DRIVERNUMBER" class="form-control" placeholder="Driving Licence Number" required>
<input type="email" name="EMAILADDRESS" id="EMAILADDRESS" class="form-control" placeholder="Email Address">
<input type="text" name="CONTACTNUMBER" id="CONTACTNUMBER" class="form-control" placeholder="Telephone Number">
<BR><BR>
<input type="submit" id="submit-btn" value="send" onclick=doPost() class="blue">
</form>
<script>
function doPost(e){
return handleResponse(e);
}
function handleResponse(e) {
var lock = LockService.getPublicLock();
lock.waitLock(30000);
try {
var doc = SpreadsheetApp.openById("1bEJwGt5ixDjvIUH56jcNB5j71rSetrVcvtrjMQCrVp4");
var sheet = doc.getSheetByName("DRV");
var headRow = e.parameter.header_row || 1;
var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0];
var nextRow = sheet.getLastRow()+1;
var row = [];
for (i in headers){
if (headers[i] == "Timestamp"){
row.push(new Date());
} else {
row.push(e.parameter[headers[i]]);
}
}
sheet.getRange(nextRow, 1, 1, row.length).setValues([row]);
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();
}
}
function setup() {
var doc = SpreadsheetApp.getActiveSpreadsheet();
SCRIPT_PROP.setProperty("key", doc.getId());
}
</script>
我已经尝试 运行从 Code.gs 文件中获取所有代码,并且我已经在 myForm.html 文件的标签中 运行 获取所有代码,但都没有做任何事。任何人都可以告诉我我做错了什么或指出一个 html 表单的示例,该表单写入 Google spreadsheet 可以工作所以我可以在我失败的地方?
谢谢!
不要在 myForm.html 文件中使用 doPost(e)
。您必须使用:
google.script.run.someFunctionNameHere();
调用 .gs
文件中的函数。 handleResponse(e)
函数也必须在 .gs
文件中。
您可能根本不需要使用 doPost(e)
。仅当首次使用 HTTPS POST 请求调用脚本时才会调用它。您不需要 POST 请求将表单输入值发送到服务器。您只需要 .gs
文件中的一个函数来接收参数中的数据。
确保查看表单文档: