Javascript 在Google工作表中的一行中添加数字

Javascript 在Google工作表中的一行中添加数字,javascript,google-sheets,spreadsheet,Javascript,Google Sheets,Spreadsheet,我试图将一行中的数字添加到“总计”列中。如果行中的值之和为0,则该行中单元格的“总计”列将显示不同的值。这意味着我不能使用已经提供的=SUM方法 如果我将数字添加到一列中,我的代码可以完美地工作,但是如果我尝试将数字添加到跨多个列的一行中,则代码无法工作 例如,如果我有一个包含4行的列,每个列的值为(1,2,3,4),那么我创建的函数将得到“10”。但是,如果我有一行4个数字,比如a列第1行=1,B列第1行=2,C1=3,D1=4,那么结果将是1,2,3,4,而不是10 我做错了什么 funct

我试图将一行中的数字添加到“总计”列中。如果行中的值之和为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;
  }
}
function totalsffunction(customVal,rowValues){
var sumTotal=0;
对于(var i=0;i
您仍然可以使用sum,它包装在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)) ))
对于您编写的自定义函数,您可能需要一个额外的循环来使函数工作(因为值是作为2D数组传入的)

看看这是否有效:

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;
}
}

是的,我尝试了双for循环,因为它是一个2D数组,但结果还是一样,只有一个for循环。但我确实使用了包装语句和总和,这是有效的。所以谢谢你!
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;
    })
}