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

Google Sheets脚本求和返回字符串而非数值问题求助

问题解决:Google Sheets脚本求和出现字符串拼接而非数值和

问题根源

从执行日志能看到,getValues()返回的是二维数组(每个元素都是[数值]或[]),你用reduce时没设置初始值,第一次迭代会把第一个数组[596.38]转成字符串"596.38",之后每次加的都是转成字符串的数组元素,最终变成字符串拼接结果。另外空数组[]会被转成空字符串,也会干扰计算。

同时,你找空白行的方法getRange('A:A').getValues().length + 1有问题,这个会返回整个列的行数(包括所有空白行),不是真正的首个空白行,应该用getLastRow() + 1。

修正后的代码

function sommami() {
  // 获取Assets工作表
  const foglioAssets = SpreadsheetApp.getActive().getSheetByName('Assets');
  // 获取P2:P100的数值,扁平化数组并处理空值为0
  const values = foglioAssets.getRange('P2:P100').getValues()
    .flat() // 把二维数组转成一维数组
    .map(val => val === '' ? 0 : Number(val)); // 空值转0,确保都是数值类型
  
  // 计算求和
  const somma = values.reduce((total, num) => total + num, 0); // 设置初始值0
  
  // 获取HistoricalNW工作表
  const foglioHistoricalNW = SpreadsheetApp.getActive().getSheetByName('HistoricalNW');
  // 获取首个空白行(最后一行+1)
  const primaRigaLibera = foglioHistoricalNW.getLastRow() + 1;
  // 格式化日期
  const data = Utilities.formatDate(new Date(), "GMT", "dd/MM/yyyy");
  
  // 批量写入日期和求和结果,减少API调用
  foglioHistoricalNW.getRange(primaRigaLibera, 1, 1, 2).setValues([[data, somma]]);
}

关键修改点

  • 数组扁平化:用flat()把二维数组转成一维,直接获取每个单元格的数值
  • 空值处理:用map()把空单元格转成0,避免非数值参与计算
  • reduce初始值:给reduce设置第二个参数0,确保从数值累加开始
  • 空白行定位:用getLastRow() + 1精准找到首个空白行
  • 批量写入:用setValues()一次写入日期和求和结果,比两次setValue()更高效

内容的提问来源于stack exchange,提问作者Pietro Ottati

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 10:02:23