簡體   English   中英

Google 工作表未接收表單提交

[英]Google sheet is not receiving form submits

我創建了工作表: https : //docs.google.com/spreadsheets/d/1aghZREjkKSNkpCfWJUw_AMs1ZEoTIZOhDca4UHvuVtU/edit?usp=sharing

我從腳本編輯器創建了以下表單:

代碼.gs

function doGet() {
    return HtmlService.createTemplateFromFile('Form.html')
        .evaluate() // evaluate MUST come before setting the Sandbox mode
        .setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL);
}


var sheetName = 'Sheet1'
var scriptProp = PropertiesService.getScriptProperties()


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

表單.html

<!DOCTYPE html>
<html>
<body>
<style>
</style>

<form name="submit-to-google-sheet" id="form" method="POST" onsubmit="myFunction()">
<input name="TEXT" type="text" placeholder="text" required>
  <input type="submit" value="Submit" name="submit" id="Submit">
</form>

<script>
function myFunction() {
  alert("The form was submitted. Please press okay to reload the page");
}
</script>

<script>
  const scriptURL = 'https://script.google.com/macros/s/AKfycbxdtFz3L5Zczor9v-CGvm1yLzTogasSF__22oadV80ZFMQFH18/exec'
  const form = document.forms['submit-to-google-sheet']
  form.addEventListener('submit', e => {
    e.preventDefault()
    window.open("URL after form submit", "_top")
    fetch(scriptURL, { method: 'POST', body: new FormData(form)})
      .then(response => console.log('Success!', response))
      .catch(error => console.error('Error!', error.message))
  })
</script>

</body>
</html>

相同的代碼在另一張工作表中對我有用,但是當我出於某種原因嘗試在此工作表中重復時,表單未提交到工作表。 有什么幫助嗎? 並且請您以正確的方式提供說明以將相同的代碼復制到其他工作表,以便當我創建另一個具有不同列的工作表並將相同的代碼粘貼到腳本編輯器時,需要做什么才能使腳本適用於新的表等。 謝謝

你需要改變兩件事:

  1. 當您將腳本復制到另一個電子表格並將其作為 WebApp 發布時 - scriptURL將發生變化 - 請使用新的進行更新。

  2. var doc = SpreadsheetApp.openById(scriptProp.getProperty('key'))只有在為新腳本設置屬性key才會起作用。 作為解決方法,只需將此行替換為var doc = SpreadsheetApp.getActive(); - 這將使腳本自動找到它所綁定的電子表格。

好的,解決方案是;

保留問題中的原始腳本,並進行以下修改:

從 html 中刪除這部分:

<script> const scriptURL = 'Script URL' const form = document.forms['submit-to-google-sheet'] form.addEventListener('submit', e => { e.preventDefault() window.open("URL 
after form submit", "_top") fetch ... </script>

並在此處添加腳本 URL:

<form name="submit-to-google-sheet" id="form" action="Script URL" method="POST" 
onsubmit="myFunction()">

和重定向目的; 替換這個:

<script>
function myFunction() {
alert("The form was submitted. Please press okay to reload the page");
}
</script>

<script> function myFunction() { alert("The form was submitted. Please press okay to reload the page"); window.open("https://www.example.com", "_top"); } </script>

感謝所有朋友的幫助..

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM