| | |
| | | */ |
| | | function AVERAGE(...val) { |
| | | try { |
| | | let num = null; |
| | | let arr = []; |
| | | if (val && val.length > 0) { |
| | | arr = val.filter((item) => item != null && item !== ""); |
| | | arr.forEach((item) => { |
| | | num += item; |
| | | }); |
| | | if (arr.length > 0) { |
| | | return num / arr.length; |
| | | } else { |
| | | return null; |
| | | // 单元格值经常以字符串形式传入;先展开参数并转成数字,避免 |
| | | // `AVERAGE(C3:D3)` 在展开后收到字符串而得到 NaN。 |
| | | const values = []; |
| | | const flatten = (items) => items.forEach((item) => { |
| | | if (Array.isArray(item)) return flatten(item); |
| | | if (item !== null && item !== undefined && item !== "" && item !== " ") { |
| | | const number = Number(item); |
| | | if (Number.isFinite(number)) values.push(number); |
| | | } |
| | | } else { |
| | | return null; |
| | | } |
| | | }); |
| | | flatten(val); |
| | | return values.length ? values.reduce((sum, item) => sum + item, 0) / values.length : null; |
| | | } catch (error) {} |
| | | } |
| | | /** |