为了账号安全,请及时绑定邮箱和手机立即绑定

将变量中的数据(不在表单提交上)发送到谷歌表

将变量中的数据(不在表单提交上)发送到谷歌表

汪汪一只猫 2021-06-16 02:03:52
我是 Vue.js 和 javascript 的新手。我试图将一些数据发送到谷歌工作表但没有成功。我找到了一些关于如何发布数据的信息,但我的数据没有存储在表单中。所以我在没有运气的情况下附加了一个空的“表单”,其中包含我想发布的数据。这是我发布数据的方式:saveToGoogleSheet () {  const scriptURL = 'https://script.google.com/macros/s/.../exec'  const form = ''  var sendingData = new FormData(form)  sendingData.append('starRating', this.feedbackData.starRating)  fetch(scriptURL, {method: 'POST', body: new FormData(sendingData)})    .then(response => console.log('Success!', response))    .catch(error => console.error('Error!', error.message))}这是谷歌脚本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.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()  }}但是谷歌电子表格没有被填充,但如果我 console.log 数据存在。1)我做错了什么?2)另外,有没有办法在不附加空表格的情况下发送数据?3)最后,如果我想发送更多数据,我可以做一些类似的事情吗?sendingData.append({  'starRating' = this.feedbackData.starRating  'nowReading' = this.feedbackData.nowReading})还是我需要做:sendingData.append('starRating', this.feedbackData.starRating)sendingData.append('nowReading', this.feedbackData.nowReading)还是什么?
查看完整描述

2 回答

?
陪伴而非守候

TA贡献1757条经验 获得超8个赞

  • 您已经部署了 Web 应用程序以接受价值。

  • 你想发送的对象,使这些值像下面的图像的电子表格{"userName":"","userNumber":"","friendName":"","friendNumber":"","inviteMessage":"","nowReading":"S2/E1/","starRating":"4"}fetch()的Javascript。

//img1.sycdn.imooc.com//60cc4adc0001583609230167.jpg

如果我的理解是正确的,这个修改怎么样?

改装要点:

  • 当使用 POST 方法发送值时,可以使用e.postData.contentsfrom eof检索该值doPost(e)

    • 但在这种情况下,该值需要作为字符串发送。所以请使用JSON.parse().

    • 所以请body: JSON.stringify(this.feedbackData)}fetch()旁边使用。

修改后的脚本:

请修改如下。

Google Apps 脚本:

从:

var newRow = headers.map(function(header) {

  return header === 'timestamp' ? new Date() : e.parameter[header]

})

至:

var params = JSON.parse(e.postData.contents); // Added

var newRow = headers.map(function(header) {

  return header === 'timestamp' ? new Date() : params[header]; // Modified

});

Javascript:

请在您的问题中使用上述“更新”部分的脚本。


saveToGoogleSheet () {

  const scriptURL = 'https://script.google.com/macros/s/.../exec'

  fetch(scriptURL, {method: 'POST', body: JSON.stringify(this.feedbackData)})

    .then(response => console.log('Success!', response))

    .catch(error => console.error('Error!', error.message))

}

笔记:

  • 当您修改 Web Apps 的 Google Apps Script 时,请将 Web Apps 部署为新版本。这样,最新的脚本就会反映到 Web Apps 中。请注意这一点。

  • 我不确定你的实际电子表格。如果与上图不同,请根据您的情况修改脚本。


查看完整回答
反对 回复 2021-06-18
  • 2 回答
  • 0 关注
  • 132 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信