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

Apps Script实现手动选中非相邻行复制粘贴至指定工作表的问题

解决Google Sheets非相邻行批量复制粘贴问题

原脚本仅支持连续选中行的复制,非相邻行选中时仅能复制最后一行,核心原因是getActiveRange()只能返回单个连续区域。要支持非相邻行,需改用getActiveRangeList()获取所有选中区域,再逐个处理复制。

修改后的完整脚本:

function copyNonAdjacentRows() {
  SpreadsheetApp.flush();  
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sourceSheet = ss.getActiveSheet();
  // 获取所有选中的区域列表(支持非相邻选中)
  const rangeList = sourceSheet.getActiveRangeList().getRanges();
  const targetSheet = ss.getSheetByName("fight list raw");
  
  if (!targetSheet) {
    SpreadsheetApp.getUi().alert("目标工作表\"fight list raw\"不存在");
    return;
  }

  let lastRow = targetSheet.getLastRow();
  // 遍历每个选中的区域
  rangeList.forEach(range => {
    const rowCount = range.getNumRows();
    // 插入对应行数的空行
    targetSheet.insertRowsAfter(lastRow, rowCount);
    // 复制当前区域到目标位置
    range.copyTo(targetSheet.getRange(`A${lastRow + 1}:AA${lastRow + rowCount}`), {contentsOnly: true});
    // 更新最后一行位置
    lastRow += rowCount;
  });
}

关键改动说明

  • 替换getActiveRange()为getActiveRangeList().getRanges():获取所有选中的非相邻区域,返回一个区域数组
  • 遍历区域数组:逐个处理每个选中的连续块,确保所有选中行都被复制
  • 动态更新目标行位置:每次复制后更新lastRow,保证后续内容依次粘贴在目标表末尾
  • 增加目标表存在性校验:避免因工作表不存在导致的报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 02:25:24