Google Sheets联动设置:按C列值控制D列下拉与编辑权限
Google Sheets 实现C列选择Full时D列可编辑并显示下拉列表的方案
方法一:结合数据验证与Apps Script(严格满足需求)
这种方法能实现C列选Full时D列显示指定下拉且可编辑,否则D列完全不可编辑的效果。
1. 预先配置D列的基础数据验证
- 选中
D2:Dn(替换n为实际最后一行行号)的单元格区域 - 点击顶部菜单栏「数据」→「数据验证」
- 在弹出的配置面板中:
- 「条件」选择「列表项」,输入
bank,cash - 取消勾选「显示下拉列表」,点击「保存」
- 「条件」选择「列表项」,输入
2. 编写脚本控制权限与下拉显示
- 点击菜单栏「扩展」→「Apps Script」打开脚本编辑器
- 删除默认代码,粘贴以下脚本:
function onEdit(e) { const activeSheet = e.source.getActiveSheet(); const editedRange = e.range; // 仅响应C列的编辑操作 if (editedRange.getColumn() !== 3) return; const targetRow = editedRange.getRow(); const dCell = activeSheet.getRange(targetRow, 4); const cCellValue = editedRange.getValue(); const currentUser = Session.getEffectiveUser(); // 获取或创建D单元格的保护规则 let cellProtection = dCell.getProtection(); if (!cellProtection || !cellProtection.isProtected()) { cellProtection = dCell.protect().setDescription('Conditional edit lock'); cellProtection.addEditor(currentUser); cellProtection.removeEditors(cellProtection.getEditors().filter(editor => editor.getEmail() !== currentUser.getEmail())); if (cellProtection.canDomainEdit()) cellProtection.setDomainEdit(false); } if (cCellValue === 'Full') { // 允许编辑并启用下拉列表 cellProtection.setWarningOnly(true); const dropdownRule = SpreadsheetApp.newDataValidation() .requireValueInList(['bank', 'cash'], true) .setAllowInvalid(false) .build(); dCell.setDataValidation(dropdownRule); } else { // 锁定单元格并清除下拉列表 cellProtection.setWarningOnly(false); dCell.setDataValidation(null); } }
- 点击脚本编辑器顶部的「保存」按钮,命名为
ConditionalCellControl - 返回表格测试:当C列对应单元格选中
Full时,D列单元格会出现bank/cash下拉列表且可编辑;选中Part或Contract时,D列单元格将被锁定,无法编辑。
方法二:仅用数据验证(轻量限制输入)
如果不需要完全锁定单元格,仅限制输入内容,可以用这种无脚本的方法:
- 选中
D2:Dn单元格区域 - 点击「数据」→「数据验证」
- 「条件」选择「自定义公式」,输入公式:
=IF($C2="Full",OR(D2="bank",D2="cash"),TRUE) - 勾选「显示下拉列表」,在「列表项」中输入
bank,cash - 「如果输入无效」选择「拒绝输入」,点击「保存」
这种设置下,当C列不是Full时,D列无法输入任何内容(输入会被直接拒绝),但仍能选中单元格。
内容的提问来源于stack exchange,提问作者VB RAo
相关产品推荐
相关产品推荐

