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
相关产品推荐
相关产品推荐

