获取 Google 工作表中某个范围的最后 X non-empty 行

Get the last X non-empty rows of a range in Google Sheets

我的范围如下图所示:

其中顶部 headers 代表一年中的月份 (1-12),左列代表一个月中的天数(1 到 28/29/30/31)。

我想在我的范围的最后 30 天执行 SUM 函数,以便它从最后一个 non-empty 值开始计数并上升直到达到该列的第一个值,然后如果还有天数要计算,则转到上个月并从最后一个值开始计算。

例如,在图像中,如果我想要范围内最后 6 个单元格的值的总和,它将求和 16、12、8、4、4 和 15。

我已尝试根据 here 所述的类似问题调整解决方案,但到目前为止我还没有成功。

使用 this question about iterating over a range using Google Script 的解决方案,我能够设计出一个有效的脚本。

该脚本将从范围的最后一个单元格向后迭代特定数量的单元格(它在移动到前一列之前迭代一列的所有行),跳过空单元格,returns 总和在新单元格中遇到的值。

  function sumOfLast30() {
  var range = SpreadsheetApp.getActiveSheet().getRange("A1:B2");
  var numRows = range.getNumRows(); // 2
  var numCols = range.getNumColumns(); // 2
  var counter = 0;
  var counterMax = 2; // this determines how many cells get counted
  var sumValues = 0;

  for (var i = numCols; i > 0; i--) 
  {
    if (counter == counterMax) {
      break;
    }
    for (var j = numRows; j > 0; j--) {
      var selectedValue = range.getCell(j,i).getValue();
      if (selectedValue != "") 
      {
        sumValues = sumValues + selectedValue;        
        counter++;
        if (counter == counterMax) 
        {
          break;
        }
      }

    }
  }
  var target = SpreadsheetApp.getActiveSheet().getRange("C3");
  target.setValue(sumValues);
}