Javascript 将变量中的数据(非表单提交)发送到google工作表

Javascript 将变量中的数据(非表单提交)发送到google工作表,javascript,vue.js,google-apps-script,google-sheets,Javascript,Vue.js,Google Apps Script,Google Sheets,我是Vue.js和javascript的新手。我正在尝试将一些数据发送到google表单,但没有成功 我找到了一些关于如何发布数据的信息,但我的数据没有存储在表单中。因此,我在一个空的“表单”中添加了我想发布的数据,但没有运气 这是来源: 以及: 以下是我发布数据的方式: saveToGoogleSheet () { const scriptURL = 'https://script.google.com/macros/s/.../exec' const form = '' var

我是Vue.js和javascript的新手。我正在尝试将一些数据发送到google表单,但没有成功

我找到了一些关于如何发布数据的信息,但我的数据没有存储在表单中。因此,我在一个空的“表单”中添加了我想发布的数据,但没有运气

这是来源: 以及:

以下是我发布数据的方式:

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

运行我的应用程序后,我收到一条成功消息:

Success!
Response {type: "cors", url: "https://script.googleusercontent.com/macros/echo?u…xxx", redirected: true, status: 200, ok: true, …}
body: ReadableStream
bodyUsed: false
headers: Headers
__proto__: Headers
ok: true
redirected: true
status: 200
statusText: ""
type: "cors"
url: "https://script.googleusercontent.com/macros/echo?user_content_key=..."
__proto__: Response
但是google电子表格没有被填充,如果我使用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)
还是什么

--更新--

在发布了这个问题后,我决定用谷歌表单重新开始。结果是,现在我确实将数据发布到工作表中,但它是“未定义的”,尽管发布前后都有数据:

console.log(this.feedbackData)
this.saveToGoogleSheet()
console.log(this.feedbackData)
我曾尝试过上述单个变量,或一次性发布所有变量(发布时大多数变量“未定义”),如下所示:

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))
}
saveToGoogleSheet () {
  const scriptURL = 'https://script.google.com/macros/s/.../exec'
  fetch(scriptURL, {method: 'POST', body: this.feedbackData})
    .then(response => console.log('Success!', response))
    .catch(error => console.error('Error!', error.message))
}
{"userName":"","userNumber":"","friendName":"","friendNumber":"","inviteMessage":"","nowReading":"S2/E1/","starRating":"4"}
就像这样:

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))
}
saveToGoogleSheet () {
  const scriptURL = 'https://script.google.com/macros/s/.../exec'
  fetch(scriptURL, {method: 'POST', body: this.feedbackData})
    .then(response => console.log('Success!', response))
    .catch(error => console.error('Error!', error.message))
}
{"userName":"","userNumber":"","friendName":"","friendNumber":"","inviteMessage":"","nowReading":"S2/E1/","starRating":"4"}
但结果是一样的

我的JSON.stringify(this.feedbackData)如下所示:

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))
}
saveToGoogleSheet () {
  const scriptURL = 'https://script.google.com/macros/s/.../exec'
  fetch(scriptURL, {method: 'POST', body: this.feedbackData})
    .then(response => console.log('Success!', response))
    .catch(error => console.error('Error!', error.message))
}
{"userName":"","userNumber":"","friendName":"","friendNumber":"","inviteMessage":"","nowReading":"S2/E1/","starRating":"4"}
  • 您已经部署了用于接受值的Web应用
  • 您希望通过使用Javascript的
    fetch()
    发送对象
    {“userName”:““userNumber”:““friendName”:““friendNumber”:““inviteMessage”:““nowReading”:“S2/E1/”,“starRating”:“4”}
    ,将值放入电子表格,如下图所示

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

修改点:
  • 使用POST方法发送值时,可以使用
    e.postData.contents
    doPost(e)
    e
    检索值。
    • 但在这种情况下,需要将值作为字符串发送。所以请使用
      JSON.parse()
    • 所以请在
      fetch()
      端使用
      body:JSON.stringify(this.feedbackData)}
修改脚本: 请修改如下

谷歌应用程序脚本: 发件人: 致: 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应用的Google应用脚本时,请将Web应用部署为新版本。这样,最新的脚本就会反映到Web应用程序中。请注意这一点。
  • 我不确定你的实际电子表格。如果与上图不同,请根据您的情况修改脚本
参考资料:

如果我误解了你的问题,而这不是你想要的结果,我道歉。

我发现了问题:

在这里:

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))
}
我应该改变这一点:

fetch(scriptURL, {method: 'POST', body: new FormData(sendingData)})
为此:

fetch(scriptURL, {method: 'POST', body: sendingData})

另外,我不需要
const form=''
如果我把
var sendingData=new FormData('')

嗨,我建议您使用api exporer:,尝试从这里添加您的值,以确保您的数据是好的!嗨,我不明白我应该如何应用链接中的信息,对不起。正如您在更新后的帖子中所看到的,我确实发布到Google Sheet,但数据总是“未定义”,即使我以fetch()所要求的格式发布了一个变量。@Marcello我深感抱歉,我的回答对您的情况没有用。