如何修改Google AppScript实现表单提交后自动填充Sheet模板?
实现思路与代码示例
核心逻辑调整
原脚本针对Google Docs做文本替换,现在改为操作Google Sheets,核心步骤为:
- 复制指定的Sheet模板文件
- 定位目标工作表
- 识别模板中的占位符(如
{{姓名}})并替换为表单提交的对应数据 - 完成填充后保存新Sheet
具体代码实现
假设表单关联的响应表为Form Responses 1,Sheet模板ID替换为你的实际模板ID,占位符采用{{字段名}}格式:
function onFormSubmit(e) { // 获取表单提交的响应数据 const response = e.namedValues; // 替换为你的Sheet模板ID const templateSheetId = "你的Sheet模板ID"; // 新Sheet命名规则,可按需修改 const newSheetName = `表单数据_${response["姓名"][0]}_${new Date().toLocaleString()}`; // 复制模板文件到当前驱动器 const newFile = DriveApp.getFileById(templateSheetId).makeCopy(newSheetName); const newSheet = SpreadsheetApp.openById(newFile.getId()).getActiveSheet(); // 遍历所有单元格替换占位符 const range = newSheet.getDataRange(); const values = range.getValues(); for (let row = 0; row < values.length; row++) { for (let col = 0; col < values[row].length; col++) { let cellValue = values[row][col]; if (typeof cellValue === 'string' && cellValue.startsWith('{{') && cellValue.endsWith('}}')) { const fieldName = cellValue.slice(2, -2).trim(); const replacement = response[fieldName] ? response[fieldName][0] : ""; values[row][col] = replacement; } } } // 将替换后的数据写回Sheet range.setValues(values); // 可选:给提交用户添加编辑权限 // DriveApp.getFileById(newFile.getId()).addEditor(response["邮箱"][0]); }
关键注意事项
- 模板中的占位符需和表单字段名完全匹配(含大小写),比如表单字段是
联系电话,模板里就要用{{联系电话}} - 首次运行脚本时需授权,允许访问Google Drive和Google Sheets权限
- 若模板包含多个工作表,需用
getSheetByName("目标工作表名")替代getActiveSheet()指定具体工作表
内容的提问来源于stack exchange,提问作者Wilberta
相关产品推荐
相关产品推荐

