求助:在Google Sheets中实现支票簿式Dependent Dropdowns
Google Sheets长列表联动下拉脚本实现方案
问题背景
此前用自制Excel表格追踪财务状况,迁移至Google Sheets后,联动下拉列公式失效。查阅多数方案仅适配主表单一选择的联动下拉,无法满足支票簿这类长列表场景,需代码实现方案。已准备简化版表格(仅保留数月数据,清除多数数据验证与公式)。
核心需求
- 将CategoryMaster工作表的内容同步至Jan、Feb等月份工作表
- 在月份工作表的D列选择分类后,对应联动下拉列仅显示该分类下的选项
脚本实现步骤
1. 进入脚本编辑器
打开目标Google Sheets,点击「扩展程序」→「Apps Script」进入脚本编辑界面。
2. 粘贴脚本代码
删除编辑器默认代码,替换为以下代码:
function onEdit(e) { const sheet = e.source.getActiveSheet(); // 按需扩展月份工作表名称 const monthSheets = ['Jan', 'Feb', 'Mar']; if (!monthSheets.includes(sheet.getName())) return; const range = e.range; // 监听D列(分类列)第2行及以下的编辑 if (range.getColumn() !== 4 || range.getRow() < 2) return; const selectedCategory = range.getValue(); const masterSheet = e.source.getSheetByName('CategoryMaster'); const masterData = masterSheet.getDataRange().getValues(); // 筛选当前分类对应的选项 const options = masterData.filter(row => row[0] === selectedCategory && row[1]).map(row => row[1]); // 为当前行E列设置联动下拉验证(若需其他列,修改数字5为对应列号) const targetCell = sheet.getRange(range.getRow(), 5); const rule = SpreadsheetApp.newDataValidation() .requireValueInList(options, true) .setAllowInvalid(false) .build(); targetCell.setDataValidation(rule); }
3. 脚本配置说明
- 月份工作表范围:修改
monthSheets数组,添加实际需要的月份表名称(如'Apr'、'May') - 监听列调整:若分类列不是D列,修改
range.getColumn() !== 4中的数字4为对应列号(A列=1,B列=2...) - 联动列调整:若联动下拉列不是E列,修改
getRange(range.getRow(), 5)中的数字5为对应列号
4. 测试验证
在任意月份工作表的D列选择分类,对应行的联动列会自动加载该分类下的选项下拉列表。
内容的提问来源于stack exchange,提问作者Psychphrancisco
相关产品推荐
相关产品推荐

