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

我是 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)

还是什么?


汪汪一只猫
浏览 133回答 2
2回答

陪伴而非守候

您已经部署了 Web 应用程序以接受价值。你想发送的对象,使这些值像下面的图像的电子表格{"userName":"","userNumber":"","friendName":"","friendNumber":"","inviteMessage":"","nowReading":"S2/E1/","starRating":"4"}用fetch()的Javascript。如果我的理解是正确的,这个修改怎么样?改装要点:当使用 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); // Addedvar 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 中。请注意这一点。我不确定你的实际电子表格。如果与上图不同,请根据您的情况修改脚本。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript