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

Storing all forms answers in one single file

我正在尝试将用户提交的表单的每个响应存储在 AppS 脚本中。 我正在使用此代码,但出现错误:

'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() returns FormResponse object。在您的情况下,我认为需要使用 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表单中检索的,并且它们被附加到Spreadsheet的第一个sheet。
  • 关于 var id_form = FormApp.openById(form.getId());,在您的脚本中,form 可能与 FormApp.openById(form.getId()) 相同。
  • 在Google表单中,提交空答案时,该问题没有任何价值。由此,需要考虑这一点。因此,首先,从项目中检索标题,并使用项目标题创建值。我认为这可能是一个重点。

参考文献: