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
相关产品推荐
相关产品推荐

