Google Sheet自动合并列脚本需求:关联Google Form实时同步
Google Sheet 表单提交自动格式化脚本解决方案
核心脚本实现
以下是经过验证的可运行脚本,可直接适配你的需求,需根据实际表格配置修改参数:
function formatFormResponse(e) { // 配置参数,根据你的表格实际情况修改 const CONFIG = { sourceSheetName: "表单响应", // 存储表单原始数据的工作表名称 targetSheetName: "主数据", // 生成格式化后数据的目标工作表名称 customHeaders: ["问题1", "问题2", "问题3", "问题4", "问题5", "问题6", "问题7", "问题8", "问题9", "问题10", "问题11", "问题12", "问题13", "问题14", "问题15"], // B-P列对应的自定义表头,需与列数一致(共15列) branchColumnName: "分支信息", // 新增分支列的表头 processedMarkerColumn: "S" // 标记已处理行的列(避免重复生成数据) }; const ss = SpreadsheetApp.getActiveSpreadsheet(); const sourceSheet = ss.getSheetByName(CONFIG.sourceSheetName); // 若目标表不存在则自动创建 const targetSheet = ss.getSheetByName(CONFIG.targetSheetName) || ss.insertSheet(CONFIG.targetSheetName); // 获取表单提交的新增行数据 const newRow = e.range.getValues()[0]; const rowIndex = e.range.getRow(); // 跳过已处理的行,避免重复触发 if (sourceSheet.getRange(CONFIG.processedMarkerColumn + rowIndex).getValue() === "已处理") return; // 首次运行时初始化目标表表头 if (targetSheet.getLastRow() === 0) { const targetHeaders = [ sourceSheet.getRange("A1").getValue(), "合并内容", // 合并列的统一表头,可自定义 CONFIG.branchColumnName, sourceSheet.getRange("Q1").getValue(), sourceSheet.getRange("R1").getValue() ]; targetSheet.appendRow(targetHeaders); } // 提取固定列数据 const colAData = newRow[0]; const colQData = newRow[16]; // Q列对应数组索引16(从0开始计数) const colRData = newRow[17]; // R列对应数组索引17 // 循环处理B-P列,生成合并行 for (let i = 1; i <= 15; i++) { const cellValue = newRow[i]; // 跳过空值(可根据需求删除此判断) if (!cellValue) continue; // 组装格式化后的单行数据,分支信息可替换为自定义逻辑(如根据条件判断) const targetRow = [ colAData, `${CONFIG.customHeaders[i-1]}: ${cellValue}`, "默认分支", // 此处替换为你的分支信息生成规则 colQData, colRData ]; targetSheet.appendRow(targetRow); } // 标记当前行为已处理 sourceSheet.getRange(CONFIG.processedMarkerColumn + rowIndex).setValue("已处理"); }
脚本部署与触发设置
- 打开关联的Google Sheet,点击顶部菜单「扩展程序」→「Apps脚本」
- 将上述代码粘贴到脚本编辑器,替换原有内容
- 修改
CONFIG中的参数,确保与你的表格列名、表头匹配,重点调整customHeaders数组和分支信息生成逻辑 - 点击脚本编辑器顶部的保存按钮,命名脚本(如
FormResponseFormatter) - 设置表单提交触发:
- 点击左侧「触发器」图标(闹钟形状)
- 点击「添加触发器」,配置如下:
- 选择函数:
formatFormResponse - 部署类型:
Head deployments - 事件源:
从电子表格 - 事件类型:
表单提交
- 选择函数:
- 点击保存,按提示完成权限授权(若提示「未经验证的应用」,点击「高级」→「转到脚本(不安全)」完成授权)
常见报错排查
- 权限不足:首次授权时需允许脚本访问你的Google Sheet,按提示完成授权流程即可
- 索引越界错误:检查
customHeaders数组长度是否为15(匹配B-P列数量),以及Q/R列的数组索引是否正确 - 重复生成数据:确保
processedMarkerColumn设置的列未被其他数据占用,或删除标记已处理的代码块(不推荐) - 目标表无法创建:确认你拥有当前表格的编辑权限,脚本可自动创建目标表
内容的提问来源于stack exchange,提问作者Arjay Aquino
相关产品推荐
相关产品推荐

