我编写了这个自定义Apps脚本公式,以便从多个工作表中收集数据,将数组附加在一起,对其进行过滤,然后将数据作为数组返回:
function projectEntries(projectNumber,returnColumnStart,returnNumColumns){
var userSS = SpreadsheetApp.getActiveSpreadsheet();
var sheetLocalDataValidation = userSS.getSheetByName("Data Validation");
var years = removeArrayBlanks(sheetLocalDataValidation.getRange("YearsLogged").getValues());
var numYears = years.length;
var returnArray = [];
projectNumber = String(projectNumber);
for (var i = 0; i < numYears; i++){
var logSheet = userSS.getSheetByName(years[i]+" Time Log");
var logValues = logSheet.getRange(2, 1, getNumRowsWithData(logSheet.getRange(2, 1, logSheet.getLastRow()-1)), logSheet.getLastColumn()).getValues();
var numLogs = logValues.length;
for (var j = 0; j < numLogs; j++){
if (logValues[j][2]==projectNumber){
returnArray.push(logValues[j].slice(returnColumnStart-1,returnColumnStart+returnNumColumns-1));
}
}
}
return returnArray;
}
在我的电子表格中,如果我在单元格B1中输入此公式:= max(projectEntries(A1,2,1)) 并将其复制到列中,它工作正常,并根据每行中的A列为我提供过滤数据的最大值。
但是A列中的数据会随着时间的推移而扩展,我希望B列能够自动扩展。但是当我在单元格B1中输入这个公式:= ARRAYFORMULA(if(isblank(A1:A),, max(projectEntries(A1:A,2,1)))) 它只用0填充B列,就像找不到数据一样。
我的猜测是我需要对自定义函数进行一些操作才能使它在arrayformula()中运行。任何人都可以帮我修改我的功能吗?
谢谢!