【问题标题】:Request failed for https://docs.google.com returned code 400. Truncated server response:https://docs.google.com 的请求失败返回代码 400。截断的服务器响应:
【发布时间】:2020-02-17 17:11:33
【问题描述】:

所以我尝试在https://script.google.com/ 上编写一个脚本来自动将数据从谷歌电子表格输入到谷歌表单,但我总是收到这个代码错误

"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-forms data-entry


【解决方案1】:

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

自动化数据输入

实现您想要的更简单的方法是使用 Apps Script Google Form 文档中的 Form Response 方法来处理 pre filling 表单。这段代码将自动从谷歌的电子表格中输入数据:

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

}

我希望这对您有所帮助,如果您发现任何问题或者您有什么不明白的地方,请告诉我。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多