我编写了这个自定义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()中工作 . 任何人都可以帮我修改我的功能吗?

谢谢!