如何编写应用程序脚本公式,以便它在Google表格arrayformula()中工作?

时间:2018-06-13 18:53:33

标签: function google-apps-script array-formulas

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

谢谢!

0 个答案:

没有答案