简体   繁体   English

表格部分填写时将 HTML 表格写入 Google 表格的问题

[英]Problem with writing HTML form to Google Sheets when form is partially filled

My form is successfully writing data to Google Sheets only when inputs in all fieldsets are selected or filled.我的表格仅在选择或填充所有字段组中的输入时成功地将数据写入Google Sheets If any one of the fields are skipped, the cells in the sheet don't get populated.如果跳过任何一个字段,则不会填充工作表中的单元格。

What am I missing or doing wrong?我错过了什么或做错了什么?


The code for my HTML form:我的HTML表格的代码:

 const scriptURL = "https://script.google.com/macros/s/AKfycbzz-KveHder1A3CX8GcqZI6GR2MQj66PDRWNKoatIET_LXNqQs/exec" const form = document.forms[0] form.addEventListener("submit", e => { e.preventDefault() fetch(scriptURL, { method: "POST", body: new FormData(form) }).then(response => console.log("Success,". response)).catch(error => console,error("Error.", error.message)) })
 <form action="https://script.google.com/macros/s/AKfycbzz-KveHder1A3CX8GcqZI6GR2MQj66PDRWNKoatIET_LXNqQs/exec" method="post"> <fieldset> <legend>Select Foobar</legend> <label><input type="checkbox" name="foobar" value="Foo">Foo</label> <label><input type="checkbox" name="foobar" value="Bar">Bar</label> <label><input type="checkbox" name="foobar" value="Baz">Baz</label> </fieldset> <fieldset> <legend>Choose Xyzzy</legend> <label><input type="radio" name="xyzzy" value="Quux">Quux</label> <label><input type="radio" name="xyzzy" value="Quuz">Quuz</label> </fieldset> <fieldset> <legend>Enter Personal Details</legend> <input type="text" placeholder="John Doe" name="name"><br> <input type="email" placeholder="john.doe@example.com" name="email"><br> <textarea placeholder="Lorem ipsum dolor sit amet…" name="description"></textarea> </fieldset> <input type="submit" value="Submit"> </form>

The Sheet that the above form submits to:上述Sheet提交给的工作表:

https://docs.google.com/spreadsheets/d/10VHS6bozcdNFYcRskkoONMT8Rt-2CwJ_LJGQWdkTJq4/ https://docs.google.com/spreadsheets/d/10VHS6bozcdNFYcRskkoONMT8Rt-2CwJ_LJGQWdkTJq4/


The code for the Google Apps Script I'm using:我正在使用的Google Apps Script的代码:

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.parameters[header].join(", ");
    })

    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()
  }
}

The error is originated by the method join(", ") when applied to an undefined value.当应用于未定义的值时,错误是由方法join(", ")引起的。

If you leave the try statement away, the error will be returned to your browser:如果您离开try语句,错误将返回到您的浏览器:

TypeError: Cannot call method "join" of undefined. 

You can modify your code to eg您可以将代码修改为例如

    var newRow = headers.map(function(header) {
      if(typeof e.parameters[header] !== "undefined") {
        return header === "timestamp" ? new Date() : e.parameters[header].join(", ");
      }else{
        return header === "timestamp" ? new Date() : e.parameters[header];
       }
    })

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

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