如何获取选中行号数组?兼容单行、多行及非连续行选中场景
获取Google Sheets选中的所有行号(支持单个/连续/非连续选区)
需求:在Google Apps Script函数运行时,获取用户选中的所有行号,支持以下选中场景:
- 单个单元格
- 拖动选中的连续单元格区域
- Ctrl+点击选中的非连续单元格区域
Google Apps Script没有直接提供统一获取所有选中行号的方法,但可以通过组合getActiveRangeList()、Range和RangeList的相关方法实现。
核心API说明
getActiveRangeList()
返回:RangeList — 当前选中的范围列表
若仅选中单个范围,其行为与getActiveRange()调用一致
getActiveRange()
返回:Range — 当前活动范围
Range 对象关键方法
getRow():返回范围的起始行号(整数)getLastRow():返回范围的结束行号(整数)getNumRows():返回范围包含的总行数(整数)
RangeList 对象关键方法
getRanges():返回包含各个独立选中范围的数组
实现代码
function getSelectedRowNumbers() { const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); const rangeList = sheet.getActiveRangeList(); const ranges = rangeList.getRanges(); const rowNumbers = new Set(); ranges.forEach(range => { const startRow = range.getRow(); const endRow = range.getLastRow(); // 遍历当前范围的所有行号并加入集合(自动去重) for (let row = startRow; row <= endRow; row++) { rowNumbers.add(row); } }); // 转成排序后的数组返回 return Array.from(rowNumbers).sort((a, b) => a - b); }
代码说明
- 获取当前活动工作表和选中的范围列表
- 将RangeList转为独立Range的数组,逐个处理每个选中区域
- 对每个Range,计算起始行到结束行的所有行号,用
Set存储实现自动去重(避免重复选中同一行的情况) - 最后将Set转为排序后的数组,返回所有唯一的选中行号
内容的提问来源于stack exchange,提问作者Amaroq
相关产品推荐
相关产品推荐

