如何使用 App 脚本读取 Google 表单数据

How to read Google Form Data Using App Script

我是 App 脚本的新手。我正在尝试使用 App Script 读取提交的数据。我尝试使用提供的答案 ,但我无法阅读它。

我试了很多其他的方法,还是不行。

function myFunction() {
  var form = FormApp.openById('1_HABIBYRZ-zsEMuzMCnsrAOYFlQSKwaIhmeT1y2SY6Y');
  var formResponses = form.getResponses();

  MailApp.sendEmail ("test@appirio.com", "Form Submited: Foo feedback " + Date.now(), +formResponses);
}

我也想知道,如何调试 App Script 中的任何问题。

提前致谢!

我推荐的方法是将您的表单回复输入 google sheet,然后通过电子邮件中的附件导出为 csv。像下面这样。确保正确的 API 处于活动状态很重要,例如 Drive API、Gmail API 并且如果需要,您的 oauthScopes 已添加到清单中。


编辑我的答案以推荐 stewarts 的答案。更清洁、更简单、更高效。

function ExportToCSVCrntMonth(){
 var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1'); //change this to sheet name
 // Change the below line to get the folder where you want the CSV files stored.
 var folder = DriveApp.createFolder(ss.getName().toLowerCase().replace(/ /g,'_') + '_csv_' + new Date().getTime());
 fileName = ss.getName() + ".csv";
 var csvFile = convertRangeToCsvFileCrnt_(fileName, ss);
 folder.createFile(fileName, csvFile);

 var csvmail = folder.getFilesByName('your sheet name + .csv');
  MailApp.sendEmail({
  to: "your email ere",
  subject: "CSV attached",
  body: "body text",

  attachments: [csvmail.next()]
  });
 }

function convertRangeToCsvFileCrnt_(csvFileName, ss) {
var activeRange = ss.getDataRange();
 try {
   var data = activeRange.getValues();
   var csvFile = undefined;

   if (data.length > 1) {
   var csv = "";
   for (var row = 0; row < data.length; row++) {
    for (var col = 0; col < data[row].length; col++) {
      if (data[row][col].toString().indexOf(",") != -1) {
        data[row][col] = "\"" + data[row][col] + "\"";
       }
      }

    if (row < data.length-1) {
      csv += data[row].join(",") + "\r\n";
    }
    else {
      csv += data[row];
     }
    }
   csvFile = csv;
  }
   return csvFile;
  }
   catch(err) {
   Logger.log(err);
   Browser.msgBox(err);
    }
  }

上面的另一个答案可能有用,但有点复杂。为了让您将表单响应作为变量保存在您的程序中,这样您就可以通过电子邮件发送它,您可以这样做:

 function formResponsesToArray() {
  var app = FormApp.openById(...),
  responses = app.getResponses(), stringResponses = []

  responses.forEach(function(r) {
    var response = []
    r.getItemResponses().forEach(function(i) {
      response.push(i.getResponse())
    })

    stringResponses.push(response)
  })

  Logger.log(stringResponses)
}

这将记录这样一组响应: