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

问题描述 投票:0回答:1

我有一个功能,我已经在谷歌表格中使用了很多年,而且效果很好。当我创建一个新的工作表文档并添加该功能后,它停止工作。我一直试图弄清楚谷歌在他们的 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
。任何想法出了什么问题或已更改?我在谷歌文档中找不到任何内容。

javascript google-sheets google-apps-script custom-function
1个回答
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;
    })
}
© www.soinside.com 2019 - 2024. All rights reserved.