请求将含名称与4个产品Sheet的电子表格合并至单一Sheet
合并谷歌表格多个产品Sheet到单个Sheet的解决方案
搞定多个Sheet合并到一个Sheet的需求,我给你两个靠谱方案,按需选择:
方案一:手动公式法(适合快速操作,无代码基础)
如果你的4个产品Sheet表头完全一致,用这个方法最快:
- 先在表格里新建一个Sheet,命名为「合并数据」(或你喜欢的名称)
- 在「合并数据」的A1单元格输入以下公式:
=QUERY({产品1!A:Z;产品2!A2:Z;产品3!A2:Z;产品4!A2:Z}, "select * where Col1 is not null", 1)
- 公式说明:
{产品1!A:Z;产品2!A2:Z}:用大括号纵向合并多个Sheet的区域,产品2及以后从A2开始是为了跳过重复表头QUERY(..., "select * where Col1 is not null", 1):自动筛选掉空行(Col1指第一列,可根据实际非空列调整),最后一个参数1表示保留1行表头
方案二:Google Apps Script法(适合数据量大、需定期更新的场景)
如果数据量很大,或者需要定期重复合并操作,用脚本更高效:
- 打开你的谷歌表格,点击顶部菜单栏「扩展」→「Apps Script」
- 删除默认的
myFunction()代码,替换成下面的脚本:
function mergeSheets() { // 获取当前表格实例 const ss = SpreadsheetApp.getActiveSpreadsheet(); // 定义要合并的产品Sheet名称(可根据实际修改) const sheetNames = ["产品1", "产品2", "产品3", "产品4"]; // 目标Sheet,不存在则自动创建 let targetSheet = ss.getSheetByName("合并数据"); if (!targetSheet) { targetSheet = ss.insertSheet("合并数据"); } // 清空目标Sheet旧数据(若想保留历史数据可注释这两行) targetSheet.clearContents(); let rowIndex = 1; // 遍历每个产品Sheet合并数据 sheetNames.forEach((name) => { const sheet = ss.getSheetByName(name); if (!sheet) return; // 第一个Sheet保留表头,后续Sheet只取数据行 const range = rowIndex === 1 ? sheet.getDataRange() : sheet.getRange(2, 1, sheet.getLastRow() - 1, sheet.getLastColumn()); const values = range.getValues(); // 将数据写入目标Sheet targetSheet.getRange(rowIndex, 1, values.length, values[0].length).setValues(values); rowIndex += values.length; }); SpreadsheetApp.getUi().alert("数据合并完成!"); }
- 点击脚本编辑器的「保存」按钮,给脚本命名(比如
MergeProductSheets) - 点击「运行」,第一次运行会要求授权,按照提示完成即可
- 脚本特性:自动处理表头重复问题,清空旧数据避免重复,完成后弹出提示
你可以根据参考效果调整公式或脚本里的Sheet名称、数据范围,确保合并后的格式符合预期。
内容的提问来源于stack exchange,提问作者Des Watson




