将所有表格答案存储在一个文件中

我正在尝试将来自用户提交的表单的每个响应存储在AppScrip中。 我正在使用此代码,但收到错误:

'TypeError: id_form.getResponses is not a function'

我的代码:

//store answers in one file

编辑:

function setDestination_responses(form) {
  var id_form = FormApp.openById(form.getId());
  var spreadsheet_responses = SpreadsheetApp.openById('1TX4GOsihKuXFhbZMhtFWPYmGwrxii0XhyGhyTKzPKhc');

  var sheet_spreadsheet_responses = spreadsheet_responses.getSheets()[0];
  var titles = id_form.getItems().map(e => e.getTitle());
  var formResponses = id_form.getResponses();
  var values = formResponses.map(f => f.getItemResponses().reduce((o, i) => {
    var r = i.getResponse();
    return Object.assign(o, {[i.getItem().getTitle()]: Array.isArray(r) ? r.join(",") : r});
  }, {})).map(o => titles.map(t => o[t] || ""));

  if (values.length==0) {console.log(`VALUES EQUAL TO 0 ${values}`)} 
  else{sheet_spreadsheet_responses.getRange(sheet_spreadsheet_responses.getLastRow() + 1, 1, values.length, values[0].length).setValues(values)};
}

解决方案

修改点:

  • getResponses()返回FormResponse对象。在您的情况下,我认为需要使用getItemResponses()检索响应值。
  • 循环使用appendRow时,流程成本较高。Ref

当这些要点反映到您的脚本中时,它将如下所示。

修改后的脚本:

function myFunction() {
  var id_form = FormApp.openById(form.getId());
  var spreadsheet_responses = SpreadsheetApp.openById('1X1rhvgTfFq0-SoecLcgDP1Zu8x93Vba0EKMTBkRFJcw');
  var sheet_spreadsheet_responses = spreadsheet_responses.getSheets()[0];
  var titles = id_form.getItems().map(e => e.getTitle());
  var formResponses = id_form.getResponses();
  var values = formResponses.map(f => f.getItemResponses().reduce((o, i) => {
    var r = i.getResponse();
    return Object.assign(o, {[i.getItem().getTitle()]: Array.isArray(r) ? r.join(",") : r});
  }, {})).map(o => titles.map(t => o[t] || ""));
  sheet_spreadsheet_responses.getRange(sheet_spreadsheet_responses.getLastRow() + 1, 1, values.length, values[0].length).setValues(values);
}
  • 运行此脚本时,将从Google表单检索所有响应,并将它们追加到电子表格的第一个工作表。
  • 关于var id_form = FormApp.openById(form.getId());,在您的脚本中,form可能与FormApp.openById(form.getId())相同。
  • 在Google Form中,当提交空答案时,问题没有价值。由此,就需要考虑这一点。因此,首先从条目中检索标题,并使用条目标题创建值。我认为这可能是一个重要的观点。

引用:

  • getResponses()
  • getItemResponses()

相关文章