在 Google 个工作表中跨行添加数字
Add numbers across a row in Google Sheets
我正在尝试将一行中的数字添加到 "totals" 列中。如果行中值的总和为 0,则该行中单元格的 "totals" 列将显示不同的值。这意味着我不能使用已经提供的 =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 语句中的求和。像
=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;
})
}
我正在尝试将一行中的数字添加到 "totals" 列中。如果行中值的总和为 0,则该行中单元格的 "totals" 列将显示不同的值。这意味着我不能使用已经提供的 =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 语句中的求和。像
=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;
})
}