如何对含前导下划线的数字区域求和?(Google Sheets)
带前导下划线的数字求和解决方案
一、修复你的自定义脚本问题
你的脚本只返回第一个项,核心原因是Google Sheets传入单元格区域时会以二维数组形式传递(比如[[_12,34],[99,_42]]),而你直接用map处理的是外层的行数组,而非每个单元格内容。修改后的脚本如下:
function sum_with_underscores(underscored_nums) { // 扁平化二维数组,遍历每个单元格 let flatNums = underscored_nums.flat(Infinity); // 替换下划线并转换为数字 let nums = flatNums.map(x => parseFloat(String(x).replace("_", ""))); // 过滤无效值(比如空单元格)后求和 return nums.filter(num => !isNaN(num)).reduce((pv, cv) => pv + cv, 0); }
使用时在单元格输入=sum_with_underscores(A1:B2)即可。
二、更简便的原生Google Sheets公式方案
无需编写脚本,用原生公式就能快速实现,推荐两种方案:
方案1:SUMPRODUCT + SUBSTITUTE
=SUMPRODUCT(--SUBSTITUTE(A1:B2,"_",""))
- 逻辑:
SUBSTITUTE批量替换区域内所有单元格的下划线,--将处理后的文本转为数字,最后SUMPRODUCT完成区域求和。
方案2:SUM + ARRAYFORMULA
=SUM(ARRAYFORMULA(--SUBSTITUTE(A1:B2,"_","")))
- 逻辑:
ARRAYFORMULA让SUBSTITUTE作用于整个单元格区域,--转换数据类型后,用SUM完成求和。
两种原生公式无需授权运行,比自定义脚本更轻便高效。
内容的提问来源于stack exchange,提问作者Fernando Jesus Garcia Hipola
相关产品推荐
相关产品推荐

