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

Google Sheets Apps Script setValues参数错误:15x15范围复制失败求助

问题分析与修复方案

你的核心问题是混淆了Range对象和单元格值数组,setValues()方法要求传入二维数组,而你直接传入了Range对象,同时循环代码还存在循环条件错误。

错误点拆解

  • 循环条件逻辑错误:循环测试代码里的for (var i=0; i=14;i=i+1)是赋值操作而非判断,会导致循环逻辑异常,应改为i<=14或i<15。
  • setValues参数类型错误:无论循环还是直接复制的代码,你都直接将getRange()返回的Range对象传给setValues(),但该方法需要的是通过getValues()获取的二维数组。

修复后的代码

方案1:直接复制15x15范围(推荐,执行效率更高)

// active spreadsheet and source + target sheets
const activeSheet = SpreadsheetApp.getActiveSpreadsheet();
const srcSheet = activeSheet.getSheetByName('Data Entry');
const dstTOTSheet = activeSheet.getSheetByName('DataBaseTOT');

var firstEmptyRowTOT = dstTOTSheet.getLastRow()+1;

// 获取15x15范围的二维数组
var RoundInfo = srcSheet.getRange("B10:P24").getValues(); 
// 定位目标区域
var dstTOTRoundInfo = dstTOTSheet.getRange(firstEmptyRowTOT, 21, 15, 15);
// 传入二维数组完成赋值
dstTOTRoundInfo.setValues(RoundInfo);

方案2:逐行循环复制

// active spreadsheet and source + target sheets
const activeSheet = SpreadsheetApp.getActiveSpreadsheet();
const srcSheet = activeSheet.getSheetByName('Data Entry');
const dstTOTSheet = activeSheet.getSheetByName('DataBaseTOT');

var firstEmptyRowTOT = dstTOTSheet.getLastRow()+1;

// 修正循环条件,遍历15行
for (var i=0; i<15; i++) {
    // 获取单行的二维数组(必须调用getValues())
    var RoundInfo = srcSheet.getRange(10+i, 2, 1, 15).getValues(); 
    // 定位目标单行区域
    var dstTOTRoundInfo = dstTOTSheet.getRange(firstEmptyRowTOT + i, 21, 1, 15); 
    // 传入单行二维数组完成赋值
    dstTOTRoundInfo.setValues(RoundInfo);
}

关键说明

  • getRange()返回的是Range对象,仅代表单元格区域的引用,必须调用getValues()才能提取出包含单元格值的二维数组。
  • 单行数据在Google Apps Script中也以二维数组形式存在(格式为[[值1, 值2, ..., 值15]]),因此即使是单行复制,也要使用setValues()而非setValue()(后者仅用于单个单元格赋值)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 18:20:20