如何通过脚本从Google Form提取答复并写入新Google Spreadsheet?
问题原因
- 核心逻辑缺失:当前脚本仅实现了新建电子表格、移动到指定Drive文件夹的功能,完全没有编写提取表单答复、写入表格的相关代码,因此生成的表格为空。
- 存在无效冗余代码:
var form = FormApp.openById('1ohh3SYGm0F1wzIGeQenk6Vt-epeXY2UHgdYXtH5knWA'),getItemResponses,newSpreadsheet这行代码没有任何实际作用,重复声明form变量也属于多余操作,可直接删除。
修正后的完整脚本
function getItemResponses() { // 打开指定表单 var form = FormApp.openById('1ohh3SYGm0F1wzIGeQenk6Vt-epeXY2UHgdYXtH5knWA'); // 生成新表格名称 var formattedDate = Utilities.formatDate(new Date(), "GMT", "dd-MM-yyyy' 'HH:mm:ss"); var name = form.getTitle() + " Copy " + formattedDate; // 获取目标Drive文件夹 var destination = DriveApp.getFolderById("1u6HQQUWXKIkpakInbS9u6opWK10T91Ez"); // 新建电子表格 var newSpreadsheet = SpreadsheetApp.create(name); var sheet = newSpreadsheet.getActiveSheet(); // --- 新增:提取表单答复并写入表格 --- // 获取所有答复 var allResponses = form.getResponses(); if (allResponses.length > 0) { // 先提取表头(所有问题的标题) var items = form.getItems(); var headers = items.map(item => item.getTitle()); sheet.appendRow(headers); // 遍历每个答复,提取内容写入行 allResponses.forEach(response => { var itemResponses = response.getItemResponses(); var rowData = itemResponses.map(itemRes => itemRes.getResponse()); sheet.appendRow(rowData); }); } // --- 答复写入逻辑结束 --- // 将新表格移动到指定文件夹 var newFile = DriveApp.getFileById(newSpreadsheet.getId()); var parents = newFile.getParents(); while (parents.hasNext()) { var parent = parents.next(); parent.removeFile(newFile); } destination.addFile(newFile); }
注意事项
- 如果表单答复量较大,建议改用
setValues批量写入,而非逐行appendRow,可以提升运行效率。 - 时区可根据你的实际需求调整
Utilities.formatDate中的时区参数,避免时间显示偏差。
内容的提问来源于stack exchange,提问作者Sam F
相关产品推荐
相关产品推荐

