Google Sheets脚本:删除选中单元格的命名范围
删除Google Sheets选中单元格对应命名范围的脚本
完整实现脚本
function deleteSelectedNamedRanges() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const activeSheet = ss.getActiveSheet(); const selectedRange = activeSheet.getActiveRange(); const selectedStartRow = selectedRange.getRow(); const selectedEndRow = selectedStartRow + selectedRange.getNumRows() - 1; const selectedStartCol = selectedRange.getColumn(); const selectedEndCol = selectedStartCol + selectedRange.getNumColumns() - 1; // 获取当前工作表的所有命名范围 const namedRanges = activeSheet.getNamedRanges(); // 遍历命名范围,判断重叠后删除 namedRanges.forEach(namedRange => { const range = namedRange.getRange(); const rangeStartRow = range.getRow(); const rangeEndRow = rangeStartRow + range.getNumRows() - 1; const rangeStartCol = range.getColumn(); const rangeEndCol = rangeStartCol + range.getNumColumns() - 1; // 判断两个区域是否存在重叠 const hasOverlap = !(rangeEndRow < selectedStartRow || rangeStartRow > selectedEndRow || rangeEndCol < selectedStartCol || rangeStartCol > selectedEndCol); if (hasOverlap) { namedRange.remove(); console.log(`已删除命名范围:${namedRange.getName()}`); } }); }
代码说明
- 先获取当前活动表格、工作表,以及你选中的单元格区域
- 提取选中区域的起止行、列坐标,用于后续范围重叠判断
- 遍历当前工作表的所有命名范围,逐个提取其对应的单元格区域坐标
- 通过逻辑判断,只要命名范围的区域和选中区域有重叠(比如选中C17时,匹配以C17为范围的命名;选中C17:H18时,匹配所有落在该区域内的命名),就执行删除操作
- 删除操作会在脚本日志中记录删除的命名范围名称,可在脚本编辑器的「查看>日志」中查看
使用步骤
- 打开目标Google Sheets文档,点击顶部菜单栏「扩展程序」>「Apps 脚本」
- 将原有
delRange函数替换为上述deleteSelectedNamedRanges函数 - 点击保存按钮,给脚本命名(比如「删除选中命名范围」)
- 返回表格,选中需要处理的单个或相邻单元格区域
- 再次打开Apps脚本,点击运行按钮,首次运行需按提示完成授权
便捷优化(可选)
如果想不用每次打开脚本编辑器就能运行,可以添加自定义菜单,在脚本中追加以下代码:
function onOpen() { const ui = SpreadsheetApp.getUi(); ui.createMenu('自定义工具') .addItem('删除选中区域的命名范围', 'deleteSelectedNamedRanges') .addToUi(); }
之后每次打开表格,顶部菜单栏会多出「自定义工具」选项,直接点击即可执行脚本。
内容的提问来源于stack exchange,提问作者Wim
相关产品推荐
相关产品推荐

