繁体   English   中英

HTML格式不写到谷歌表

[英]html form not writing to google sheet

如果不遵循协议或重复一个问题,我对编码和堆栈溢出很陌生。 我确实检查了问题,但由于我的有限知识,找不到足够接近的东西。

我已经从网页上复制了一些代码, 原始代码在这里,并对其进行了修改,以适合我的Google工作表和html表单,但是我有点卡住了。 我已经打开了视图访问权限,因此您可以看到我要执行的操作,但是由于我的信誉不够,因此无法添加其他链接!

我已经创建了表格,它出现在网站上。 如果我有从Code.gs页面运行的代码,它的工作方式将与在有标题的每个单元格中张贴“未定义”一样。 但是从站点上的表单来看,没有任何反应。 如果我“测试Web应用程序的最新代码”和F12,则会收到通知“它无法读取'getpubliclock'的属性”。 如果我注释掉公用锁行,则会收到“无法读取'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电子表格中,这样我就可以在哪里失败了?

谢谢!

不要在myForm.html文件中使用doPost(e) 您必须使用:

google.script.run.someFunctionNameHere();

调用.gs文件中的函数。 handleResponse(e)函数也必须位于.gs文件中。

您可能根本不需要使用doPost(e) 仅在首次使用HTTPS POST请求调用脚本时才调用该函数。 您不需要POST请求即可将表单输入值发送到服务器。 您只需要一个.gs文件中的函数即可接收参数中的数据。

确保查看表单文档:

Google文档-表格-HTML

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM