https://docs.google.com的请求失败,返回代码400。服务器响应被截断:

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

所以我尝试在https://script.google.com/上创建脚本以自动将数据从Google电子表格输入到Google表单,但我总是收到此代码错误

"Request failed for https://docs.google.com returned code 400. Truncated server response: <!DOCTYPE html><html lang="en" class="m2"><head><link rel="shortcut icon" sizes="16x16" href="https://ssl.gstatic.com/docs/spreadsheets/forms/favic... (use muteHttpExceptions option to examine full response) (line 25, file "Code")"

有人可以帮我吗?

这里是我的代码

function auto_data_entry() {

  var formURL="https://docs.google.com/forms/u/0/d/e/1FAIpQLSduXRTFWkeq1ZLRaiGzhmT58oUZSp20FHsT73_qMj8ZpobuqA/formResponse";

  var wrkBk = SpreadsheetApp.getActiveSpreadsheet();
  var wrkSht= wrkBk.getSheetByName("Sheet1");

  var Transaction1 = wrkSht.getRange("A1").getValue();
  var Transaction2 = wrkSht.getRange("A2").getValue();
  var Transaction3 = wrkSht.getRange("A3").getValue();
  var Transaction4 = wrkSht.getRange("A4").getValue();
  var Transaction5 = wrkSht.getRange("A5").getValue();

  var datamap={"entry.663378019":Transaction1,
   "entry.978525821":Transaction2,
   "entry.1636658367":Transaction3,
   "entry.1490939339":Transaction4,
   "entry.2066528728":Transaction5};

  var options = {
    "method": "post",
    "payload": datamap
  };

  UrlFetchApp.fetch(formURL, options);
}

这里是表https://docs.google.com/spreadsheets/d/1-sLoKy6npftapr3QxoRIoYozBN6izei0E9uqF4yLg-8/edit?usp=sharing

这里是表格https://docs.google.com/forms/d/e/1FAIpQLSduXRTFWkeq1ZLRaiGzhmT58oUZSp20FHsT73_qMj8ZpobuqA/viewform

谢谢!

javascript google-sheets google-form data-entry
2个回答
1
投票

您的主要问题是,您正在尝试对Google表单使用fetch方法。 Fetch用于向网站发出HTTP请求,因此尝试在表单上执行此操作会非常复杂,因为您需要在该端创建自定义响应。

自动输入数据

一种[[轻松实现所需目标的方法是将Apps Script Google Form文档中的Form Response方法用于pre filling表单。这段代码将自动执行Google电子表格中的数据输入:

function auto_data_entry(){ var url='YOUR FORM URL'; var wrkBk = SpreadsheetApp.getActiveSpreadsheet(); var wrkSht= wrkBk.getSheetByName("Sheet1") var Transaction1 = wrkSht.getRange("A1").getValue(); var Transaction2 = wrkSht.getRange("A2").getValue(); var Transaction3 = wrkSht.getRange("A3").getValue(); var Transaction4 = wrkSht.getRange("A4").getValue(); var Transaction5 = wrkSht.getRange("A5").getValue(); var data = [Transaction1,Transaction2,Transaction3,Transaction4,Transaction5]; var form = FormApp.openByUrl(url); var questions = form.getItems(); //get the different questions you want to pre fill var FormResponse = form.createResponse(); //set a response from your response data array to the corresponding question until you fill the whole form for(i=0;i<5;i++){ var qt = questions[i].asTextItem(); var qr = qt.createResponse(data[i]); FormResponse.withItemResponse( qr ); } //create a prefilled form var preurl = FormResponse.toPrefilledUrl(); Logger.log(preurl); }
注意:您预先填写的表格网址在日志中。

自动提交表单

此外,如果您希望自动从电子表格数据中生成表格submissions,则可以使用以下代码:

function auto_submission() { var url='YOUR FORM URL'; var wrkBk = SpreadsheetApp.getActiveSpreadsheet(); var wrkSht= wrkBk.getSheetByName("Sheet1") var Transaction1 = wrkSht.getRange("A1").getValue(); var Transaction2 = wrkSht.getRange("A2").getValue(); var Transaction3 = wrkSht.getRange("A3").getValue(); var Transaction4 = wrkSht.getRange("A4").getValue(); var Transaction5 = wrkSht.getRange("A5").getValue(); var data = [Transaction1,Transaction2,Transaction3,Transaction4,Transaction5]; var form = FormApp.openByUrl(url); var questions = form.getItems(); //get the different questions you want to fill var FormResponse = form.createResponse(); //set a response from your response data array to the corresponding question until you fill the whole form for(i=0;i<5;i++){ var qt = questions[i].asTextItem(); var qr = qt.createResponse(data[i]); FormResponse.withItemResponse( qr ); } //submit the form FormResponse.submit(); }
我希望这对您有所帮助,如果您发现任何问题或不了解任何内容,请告诉我。 

0
投票
[我尝试与提出此问题的人类似,但是当我使用“自动提交表单”脚本时遇到此错误:

例外:找不到具有给定ID的项目,或者您没有访问权限。 (第17行,文件“代码”)

知道为什么吗?

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