簡體   English   中英

表格部分填寫時將 HTML 表格寫入 Google 表格的問題

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

我的表格僅在選擇或填充所有字段組中的輸入時成功地將數據寫入Google Sheets 如果跳過任何一個字段,則不會填充工作表中的單元格。

我錯過了什么或做錯了什么?


我的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>

上述Sheet提交給的工作表:

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


我正在使用的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()
  }
}

當應用於未定義的值時,錯誤是由方法join(", ")引起的。

如果您離開try語句,錯誤將返回到您的瀏覽器:

TypeError: Cannot call method "join" of undefined. 

您可以將代碼修改為例如

    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