我编写了这个自定义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给出最大值 . 每一行 .
但是A列中的数据会随着时间的推移而扩展,我希望B列随之自动扩展 . 但是当我在单元格B1中输入这个公式:= ARRAYFORMULA(if(isblank(A1:A),, max(projectEntries(A1:A,2,1))))它只用0填充B列,就像它可以'找到数据 .
我的猜测是需要对我的自定义函数进行一些操作才能使它在arrayformula()中工作 . 任何人都可以帮我修改我的功能吗?
谢谢!