Google Sheets:通过下拉菜单同步主表与隐藏店铺表库存数据
实现Google Sheets店铺库存联动与同步方案
我来帮你搞定这个店铺库存联动的需求,从下拉选店铺调取数据,到修改后同步回对应隐藏表,分三个核心步骤来实现:
1. 先搭好基础结构
确保你的表格满足以下前提:
- 有一个主工作表(比如命名为「主工作表」)
- 每个店铺对应一个隐藏的工作表,命名要清晰(比如「店铺A」「店铺B」)
- 所有工作表的商品名称列统一(比如都放在A列),库存列也统一(比如都放在B列),表头在第1行
2. 设置店铺下拉菜单并自动调取库存
第一步:添加店铺下拉选择
在主工作表的某个单元格(比如B1,用来放选中的店铺名)设置数据验证:
- 选中B1单元格,点击「数据」->「数据验证」
- 验证规则选择「列表」,如果店铺少可以手动输入名称;如果店铺多,用动态公式自动获取所有非主表的工作表名称:
=QUERY(GET_SHEETS(), "SELECT Col1 WHERE Col1 <> '主工作表'") - 勾选「显示下拉箭头」,保存设置
第二步:自动拉取对应店铺的库存
在主工作表的库存列(比如B2单元格,对应A2的商品)输入公式:
=XLOOKUP(A2, INDIRECT(B1&"!A:A"), INDIRECT(B1&"!B:B"), "无数据")
然后把这个公式下拉填充到所有商品行。
INDIRECT(B1&"!A:A")会根据B1选中的店铺名,自动引用对应工作表的A列(商品名)XLOOKUP会匹配当前商品名,拉取对应店铺的库存值,找不到就显示「无数据」
3. 实现库存修改同步回对应店铺表
公式只能单向拉取数据,要实现修改主表库存同步回隐藏表,得用Google Apps Script:
- 打开脚本编辑器:点击「扩展」->「Apps脚本」
- 清空默认代码,粘贴下面的脚本:
function onEdit(e) { const mainSheetName = "主工作表"; // 替换成你的主工作表名称 const editedSheet = e.source.getActiveSheet(); // 只处理主工作表的库存列修改 if (editedSheet.getName() !== mainSheetName) return; const editedRange = e.range; const col = editedRange.getColumn(); const row = editedRange.getRow(); // 假设库存列是B列(列号2),且修改的是第2行及以后(跳过表头) if (col !== 2 || row < 2) return; // 获取当前选中的店铺 const selectedStore = editedSheet.getRange("B1").getValue(); if (!selectedStore) return; // 找到对应的店铺工作表 const storeSheet = e.source.getSheetByName(selectedStore); if (!storeSheet) return; // 获取修改的商品名和新库存值 const productName = editedSheet.getRange(row, 1).getValue(); const newStock = editedRange.getValue(); // 在店铺表中查找对应商品并更新库存 const productMatch = storeSheet.getRange("A:A").createTextFinder(productName).findNext(); if (productMatch) { productMatch.offset(0, 1).setValue(newStock); } }
- 保存脚本(给脚本起个名字,比如「StockSync」),然后关闭编辑器
脚本说明:
- 当你修改主工作表B列(库存列)的数值时,脚本会自动触发
- 它会读取B1选中的店铺名,找到对应的隐藏工作表
- 根据当前行的商品名,在店铺表中匹配到对应行,然后把新库存值同步过去
注意事项
- 如果你的商品列/库存列不是A/B列,要修改脚本里的列号(比如库存列是C列,就把
col !== 2改成col !== 3) - 确保店铺工作表的名称和下拉菜单里的完全一致,不然脚本找不到对应表
- 第一次运行脚本时会要求授权,按照提示完成授权即可
- 商品名称要唯一,不然脚本只会修改第一个匹配到的商品库存
内容的提问来源于stack exchange,提问作者Hakan Erdur
相关产品推荐
相关产品推荐

