如何将Google Sheets中Y5:Z198范围非空数据复制到指定位置Y206
Google Sheets 脚本指定位置复制数据解决方案
问题根因
你当前使用的appendRow方法特性为:将传入的数组数据从工作表当前最后一行的A列开始依次填充,既无法指定起始列,也不能固定写入的起始行,因此无法实现从Y206开始粘贴的需求。
修改后可直接使用的代码
function CopyData() { var ss = SpreadsheetApp.getActive(); var sh = ss.getSheetByName("CAPA"); // 读取源范围Y5:Z198的所有数据 var sourceRg = sh.getRange("Y5:Z198"); var sourceValues = sourceRg.getValues(); // 筛选符合条件的行(保留原逻辑:Z列有值的行才保留) var filteredData = []; for (var i = 0; i < sourceValues.length; i++) { if (sourceValues[i][1]) { filteredData.push(sourceValues[i]); } } // 无符合条件的数据直接终止运行 if (filteredData.length === 0) return; // 定位目标范围:起始行206,起始列25(对应Y列),行数=筛选后数据行数,列数=2(对应Y、Z两列) var targetRg = sh.getRange(206, 25, filteredData.length, 2); // 一次性写入所有数据,效率远高于循环逐行写入 targetRg.setValues(filteredData); }
可选调整说明
如果你需要每次写入时不覆盖Y206之后已有的数据,而是追加在Y列现有数据的末尾,可以将目标起始行的计算逻辑替换为以下代码:
// 从206行开始查找Y、Z列第一个全空的行作为起始行 var startRow = 206; while (sh.getRange(startRow, 25).getValue() !== "" || sh.getRange(startRow, 26).getValue() !== "") { startRow++; } // 定义目标范围时把206替换为startRow即可 var targetRg = sh.getRange(startRow, 25, filteredData.length, 2);
内容的提问来源于stack exchange,提问作者Leonardo Miranda
相关产品推荐
相关产品推荐

