Google Script停止运行,因为没有传递参数

时间:2017-01-24 17:15:19

标签: javascript google-apps-script google-sheets

我有一个功能,我一直在谷歌表中使用多年,它工作得很好。创建新的工作表文档并添加该功能后,它停止工作。我一直在试图找出谷歌在他们的API中改变了什么,但没有任何成功。这是我的功能:

/**
 * Sums a cell across all sheets
 * 
 * @param {string} cell The cell (i.e. "B2")
 * @return number
 * @customfunction 
 */
function sumAllSheets(cell) 
{

  var sum = 0;
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var activeSheet = ss.getActiveSheet().getName();
  var sheets = ss.getSheets();

  for (var i=1; i < sheets.length; i++) {
    var sheet = sheets[i];
    var sheetName = sheet.getName();
    var sheetRange = sheet.getRange(cell);
    sum += parseInt(sheetRange.getValue());
  }

  return sum;
}

它基本上是通过所有工作表并对来自单个单元格的值(即所有工作表中的单元格B2)求和。在以前的版本中,我能够通过调用像cell这样的函数将参数=sumAllSheets("B2")作为字符串传递。这很好用。但是,对于新更新,cell参数为undefined。什么错误或改变了什么想法?我在谷歌文档中找不到任何内容。

1 个答案:

答案 0 :(得分:1)

您是否从总和中排除第一张纸?如果不是,则应在循环的第一个语句中将“i”设置为0。也可以尝试使用代码的这种变体

function sumAllSheets(cell) {

var sum = 0;
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheets = ss.getSheets();
for (var i = 0; i < sheets.length; i++) {
    var v = sheets[i].getRange(cell)
        .getValue();
    sum += parseInt(v ? v : 0);
}

return sum;
}

这是一个替代版本

function sumCellOnAllSheets(cell) {
return SpreadsheetApp.getActive()
    .getSheets()
    .map(function (sh) {
        return Number(sh.getRange(cell)
            .getValue())
    })
    .reduce(function (a, b) {
        return a + b;
    })
}