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

如何将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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 16:15:01