我有一个功能,我一直在谷歌表中使用多年,它工作得很好。创建新的工作表文档并添加该功能后,它停止工作。我一直在试图找出谷歌在他们的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
。什么错误或改变了什么想法?我在谷歌文档中找不到任何内容。
答案 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;
})
}