我有一个功能,我已经在谷歌表格中使用了很多年,而且效果很好。当我创建一个新的工作表文档并添加该功能后,它停止工作。我一直试图弄清楚谷歌在他们的 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
。任何想法出了什么问题或已更改?我在谷歌文档中找不到任何内容。
您是否从总和中排除第一张纸?如果不是,则应在循环的第一个语句中将“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;
})
}