将所有表格答案存储在一个文件中
我正在尝试将来自用户提交的表单的每个响应存储在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()
相关文章