javascript - 在 Google 表格中跨行添加数字

标签 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 .

我做错了什么?

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/

相关文章:

javascript - 将 javascript 对象附加到 json 文件

javascript - 了解 MeteorJS 和同构 Javascript

javascript - 如何实现跨页定时器?

javascript - 如何只保存 Canvas 的图像而不是所有 Canvas

firebase - 从Google Sheets脚本重新排列Firebase实时数据库中显示的值

javascript - 使用 GAS 的 google doc 到 pdf 转换忽略文本编辑

excel - AVERAGEIF 返回 #DIV/0

api - 是否可以使用Google Spreadsheet API在单元格中添加评论?

google-apps-script - 从另一个单元格调用公式,NOT 值,并在新单元格中执行公式

vba - 在程序中创建命令按钮并为其分配事件