You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取选中行号数组?兼容单行、多行及非连续行选中场景

获取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);
}

代码说明

  1. 获取当前活动工作表和选中的范围列表
  2. 将RangeList转为独立Range的数组,逐个处理每个选中区域
  3. 对每个Range,计算起始行到结束行的所有行号,用Set存储实现自动去重(避免重复选中同一行的情况)
  4. 最后将Set转为排序后的数组,返回所有唯一的选中行号

内容的提问来源于stack exchange,提问作者Amaroq

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 18:43:17