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

Google Apps Script中二维数组元素求和失败的技术问询

解决Google Apps Script中二维数组求和问题

问题根源

你从表格获取的test是二维数组(getValues()返回行×列的嵌套数组),直接对二维数组做遍历或reduce会因为操作的是子数组而非单个数值,导致结果错误或类型异常。

你的代码错误点

  1. testSum函数:遍历的i是每一行的子数组,total += i会将数组转为字符串拼接,而非数值累加,结果不是正确总和。
  2. 重复赋值test1:先执行test.flat()扁平化数组,但随后用test.reduce(...)覆盖了test1,且直接对二维数组test用reduce时,b是子数组,同样会触发字符串拼接。

正确解法

方法1:扁平化数组后求和(最简洁)

先把二维数组转成一维数组,再用reduce累加,同时处理空单元格避免NaN:

var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var test = sheet.getRange(13, 6, 4, 24).getValues();
// 扁平化二维数组,再累加,空单元格按0处理
var total = test.flat().reduce((sum, num) => sum + (num || 0), 0);
Logger.log(total); // 打印总和

方法2:嵌套循环遍历

通过两层循环逐个访问每个数值:

var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var test = sheet.getRange(13, 6, 4, 24).getValues();
let total = 0;
for (const row of test) {
  for (const num of row) {
    total += num || 0; // 空单元格视为0
  }
}
Logger.log(total);

方法3:嵌套reduce处理二维数组

无需扁平化,直接用两层reduce分别处理行和列:

var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var test = sheet.getRange(13, 6, 4, 24).getValues();
var total = test.reduce((rowTotal, row) => {
  return rowTotal + row.reduce((colTotal, num) => colTotal + (num || 0), 0);
}, 0);
Logger.log(total);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 07:08:12