我正在尝试将一行中的数字添加到“总计”列中。如果该行中的值的总和为 0,则该行中单元格的“总计”列将显示不同的值。这意味着我无法使用已提供的 =SUM 方法。
如果我在单列中添加数字,我的代码可以完美运行,但如果我尝试在多列的单行中添加数字,我的代码就不起作用。
例如,如果我有一列有 4 行,每行的值为 (1, 2, 3, 4),我创建的函数将得出“10”。但是,如果我有一行 4 个数字,例如 A 列行 1 = 1,B 列行 1 = 2,C1 = 3,D1 = 4,那么结果将是 1,2,3,4 而不是 10 .
我做错了什么?
function totalsFunction (customVal, rowValues) {
var sumTotal = 0;
for(var i = 0; i < rowValues.length; i++) {
sumTotal += parseInt(rowValues[i]);
}
if(sumTotal == 0) {
return customVal;
}
else{
return sumTotal;
}
}
最佳答案
您仍然可以使用包含在 if 语句中的 sum。类似的东西
=if(sum(B2:E2) = 0, "customValue", sum(B2:E2))
应该可以工作。请注意,当您使用 MMULT 时,您甚至可以拥有数组输出(每行总和)。
=ARRAYFORMULA(IF(MMULT(B2:E4, TRANSPOSE(COLUMN(B2:E2)^0))=0, "CUSTOM VALUE", MMULT(B2:E4, TRANSPOSE(COLUMN(B2:E2)^0)) ))
对于您编写的自定义函数,您可能需要一个额外的循环才能使函数正常工作(因为值作为二维数组传入)
看看这是否有效:
function totalsFunction (customVal, rowValues) {
var sumTotal = 0;
for(var i = 0; i < rowValues.length; i++) {
for(var j = 0; j < rowValues[0].length; j++) {
sumTotal += rowValues[i][j];
}
}
if(sumTotal == 0) {
return customVal;
}
else{
return sumTotal;
}
}
另一种方法(脚本每行求和,数组输出)是使用map()和reduce()
function customSumPerRow(customVal, array) {
return array.map(function(r, i) {
return r.reduce(function(a, b) {
return a + b;
})
})
.map(function(r) {
return r == 0 ? customVal : r;
})
}
关于javascript - 在 Google 表格中跨行添加数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44876712/