首页 > 解决方案 > 如何使用自定义函数在谷歌电子表格列中返回数组?

问题描述

我正在 Google 电子表格中创建一个自定义函数,该函数过滤列中的数据,具有百分比值。这个想法是检查介于 1-5% 之间的值的总和是否小于 15%。一旦找到,将所有此类百分比值填充在单个列中,无论我在何处应用此公式。

我已经编写了这段代码,当我调试它时,它会产生正确的数组值,但是,它不会在单元格中填充任何内容。

/**
 * Get the Filtered Data
 *
 * @return The range based on filters .
 * @customfunction
 */
function GetFilteredData() {
  try {
    var sum = 0;
    var actsheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Utilization");
    var range = actsheet.getRange('M3:M').getValues();
    var Alast = range.filter(String).length;
    var filteredrange = [];
    for(var i=5;i>1;i--)
    {
      var cell = actsheet.getRange("P1");
      cell.setFormula("=SUM(FILTER(M3:M,M3:M<"+i+"%))")
      sum = actsheet.getRange('P1').getValue();
      if(sum <0.15)
      {
        filteredrange = findFilteredRange(range, i, Alast);
        break;
      }
    }
    return filteredrange;
  }
  catch(err) {
    Logger.log(err);
  }
}
function findFilteredRange(datarange, criteria, lastcell){
  var fildata = [];
  for(var j = 0; j<lastcell; j++) {
    if(datarange[j] <= criteria/100) {
          fildata.push(datarange[j]*100);
    }
  }
  return fildata;
}

我不确定为什么它没有在单元格中显示任何数据。我希望它返回所有这些值,满足我在应用公式的单元格中的条件。

标签: google-apps-scriptgoogle-sheets

解决方案


尝试:

fildata.push( [ datarange[j][0] * 100 ] ); // in square brackets

因为输出需要是列表列表,即二维数组。

只会datarange[j]给你整行。


推荐阅读