【问题标题】:Google Apps Script concatenating numbers rather than addingGoogle Apps 脚本连接数字而不是相加
【发布时间】:2019-08-06 23:09:35
【问题描述】:

我编写了下面的代码来获取一列数字的一部分并将它们相加。但是,该函数是连接数字而不是相加。

我得到了这个结果:

0AMOUNT120123126129132135138141144147

但如果我从 12 月开始运行它,总和应该是: 432

我在 Google Scripts 中的代码:

//add sum and input it into the total column
function sum(startMonth, startColumn, lastRow){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheets()[0];
  startColumn = startColumn +1;
  var sum = 0;
  var currAmount = 0;
  var k = 0;
  for(k = startMonth; k <= lastRow; k++){
   currAmount = sheet.getRange(k, startColumn).getValue();
   sum += currAmount;   //currAmount + sum;
   Logger.log(sum);
  }
  SpreadsheetApp.getActiveSheet().getRange(k, startColumn).setValue(sum);
  SpreadsheetApp.getActiveSheet().getRange(k, startColumn).setBackground("Yellow");
  return sum;
}

还有我的工作表快照:

【问题讨论】:

    标签: javascript google-sheets sum


    【解决方案1】:

    您的结果是提示:这不是添加的数字。那是连接字符串。

       currAmount = sheet.getRange(k, startColumn).getValue();
       sum += currAmount;   //currAmount + sum;
    

    具体来说,这是主要问题。不管getValue()返回的数字是不是数字,都加到sum中。

    解决此问题的几种方法是调整k 的值,检查typeof 的值,或将值强制转换为数字,具体取决于您要执行的操作。这本质上是一个javascript问题,规范答案here

    另外,一般你应该batch operations where possible;例如,不是每次通过 for 循环都运行 getRange().getValue(),而是更好地使用(例如,可能需要调整)

    var amounts = sheet.getRange(startMonth, startColumn, (lastRow - startMonth), 1);
    for(var k = startMonth; k <= lastRow; k++){
     sum += amounts[k][0]
     Logger.log(sum);
    }
    

    【讨论】:

    • 谢谢!!!这非常有帮助。我对 var 声明感到疑惑,因为我习惯了 Java int
    • 如果它有助于解决问题,请accept the answer
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-02
    • 2022-11-23
    相关资源
    最近更新 更多