Google工作表未收到表单提交

问题描述 投票:0回答:1

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

并且从脚本编辑器中,我创建了以下表单:

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

Form.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>

相同的代码在另一张纸上为我工作,但是由于某种原因当我试图在此纸上重复时,表格未提交到纸上。有什么帮助吗?并且,请您以正确的方式提供说明,以将相同的代码复制到其他工作表中,以便当我创建具有不同列的另一工作表并将相同的代码粘贴到脚本编辑器时,需要做些什么才能使脚本适用于新的工作表床单等。谢谢

javascript google-apps-script google-sheets google-apps
1个回答
0
投票

您需要更改以下内容:

  1. 当您将脚本复制到另一个电子表格并将其发布为WebApp时-scriptURL将要更改-请使用新的电子表格进行更新。

  2. var doc = SpreadsheetApp.openById(scriptProp.getProperty('key'))仅在为新脚本设置属性key时起作用。作为解决方法,只需用var doc = SpreadsheetApp.getActive();替换此行-这将使脚本自动找到绑定到的电子表格。

© www.soinside.com 2019 - 2024. All rights reserved.