如何对谷歌应用脚​​本中的范围列求和

Lui*_*uis 1 javascript google-apps-script

J    
1    
2    
3    
Run Code Online (Sandbox Code Playgroud)

这是代码:

function sumsald () {
   var ss = SpreadsheetApp.getActiveSpreadsheet ();
   var s1 = ss.getSheetByName ("rendPendForm");
   var dataRange = s1.getDataRange ();
   var lastrow = dataRange.getLastRow ();
   var values = s1.getRange (2.10, lastrow, 1) .getValues ();
        var sum = 0;           
        for (var i = 0; i <values.length; i ++) {
            result = values [i] [10] + sum;
            Logger.log (result);
     }
     s1.getRange (i + 1, 10) .setValue (result);
  }
Run Code Online (Sandbox Code Playgroud)

结果脚本# NUM!
Logger.log==NaN

6 预期

谢谢,路易斯。

小智 5

不确定在示例中J是第一行的列名还是值。无论如何,要从 J 列的第一行开始获取值一直到索引上的行lastrow

var values = s1.getRange (1, 10, lastrow, 1) .getValues ();
Run Code Online (Sandbox Code Playgroud)

此外,在将数字相加时,最好忽略非数字值。例如,如果您将来自标题行的字符串和来自下方行的数字相加,您将在 Javascript/GoogleScript 中得到两个串联的字符串,而不是错误或忽略该字符串。仅当values[i][0]包含数字时才附加到总和(否则添加0到总和即什么都不做):

result += typeof values[i][0] == 'number' ? values[i][0] : 0;
Run Code Online (Sandbox Code Playgroud)

下面是完整示例:

function sumsald () {
  var ss = SpreadsheetApp.getActiveSpreadsheet ();
  var s1 = ss.getSheetByName ("rendPendForm");
  var dataRange = s1.getDataRange ();
  var lastrow = dataRange.getLastRow ();
  var values = s1.getRange (1, 10, lastrow, 1) .getValues ();
  var result = 0;
  for (var i = 0; i <values.length; i ++) {
    result += typeof values[i][0] == 'number' ? values[i][0] : 0;
    Logger.log (result);
  }
  s1.getRange (i + 1, 10) .setValue (result);
}
Run Code Online (Sandbox Code Playgroud)