Google Apps脚本-添加数组元素

时间:2019-01-21 21:55:44

标签: arrays math google-apps-script google-sheets

我是个初学者,好...我试图在数组元素中使用数学运算符,但是我不知道自己在做什么错。我使用parseInt和Number函数用一些整数来增加数组元素,但是它不起作用。

我的工作表中的原始值是: [[1000.0],[1000.0],[3000.0],[1000.0],[],[],[],[],[],[]]

当我尝试没有parseInt / Number 时,结果是: [01000100030001000、0.0、0.0、0.0、0.0、0.0、0.0、0.0、0.0、0.0]

当我尝试使用parseInt / Number 时: [NaN,0.0、0.0、0.0、0.0、0.0、0.0、0.0、0.0、0.0]

function myFunction() {
  var ssCDB = SpreadsheetApp.getActive().getSheetByName("CDB");
  var cdbRange = ssCDB.getRange(3, 3, 10, 1).getValues();

  var cdbSum = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0];

  Logger.log(cdbRange);

  for (var i=0; i<cdbRange.length; i++) {
     cdbSum[0] = cdbSum[0] + cdbRange[i];
    //cdbSum[0] = parseInt(cdbSum[0]) + parseInt(cdbRange[i]);
  }

  Logger.log(cdbSum);
}

我期望的是:[ 6000.0 ,0.0、0.0、0.0、0.0、0.0、0.0、0.0、0.0、0.0]

我在做什么错?有什么想法吗?

2 个答案:

答案 0 :(得分:1)

此修改如何?我认为您遇到的问题有3个。

  1. cdbRange是二维数组。但是您像cdbRange[i]一样使用它。
    • 在这种情况下,cdbRange[0][1000.0],它是一个对象。
  2. 通过cdbSum[0] = cdbSum[0] + cdbRange[i]cdbSum[0]用作字符串值。因为cdbRange[i]是一个对象。当它向数字添加对象时,它成为字符串类型。
    • 这是01000100030001000的原因。 cdbSum[0]的初始值为0
  3. cdbRange的索引4到9中的元素的值为undefined
    • 总和为NaN

为避免这些问题,请进行以下修改。

发件人:

cdbSum[0] = cdbSum[0] + cdbRange[i];

收件人:

if (cdbRange[i][0]) cdbSum[0] += cdbRange[i][0];

if (cdbRange[i][0]) cdbSum[0] += Number(cdbRange[i][0]);

结果:

[6000.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]

注意:

  • 我了解到您想将cdbRange的所有元素的总和加到cdbSum[0]

参考文献:

如果我误解了您的问题,请告诉我。我想修改它。

答案 1 :(得分:0)

我认为这是您想要做的:

function myFunction() {
  var sh=SpreadsheetApp.getActiveSheet();
  var vA=sh.getRange(3,3,10,1).getValues();
  var sumA=[0,0,0,0,0,0,0,0,0,0];
  for(var i=0;i<vA.length;i++) {
     sumA[i]+=vA[i][0];//a 1 column 2d array
  }
  SpreadsheetApp.getUi().showModelessDialog(HtmlService.createHtmlOutput(sumA.join(', ')), 'Sum');//Do not need this it just show your sum values
}