【问题标题】:How to return an array in a google spreadsheet column using custom function?如何使用自定义函数在谷歌电子表格列中返回数组?
【发布时间】:2019-08-28 20:15:44
【问题描述】:

我正在 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;
}

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

【问题讨论】:

  • 检查变量的类型... 将 JavaScript Array 对象与 JavaScript double 对象相乘是什么意思?您还需要确保刷新写入缓冲区,以便在读取之前计算您在脚本中写入的内容
  • 为什么不尝试直接从脚本设置单元格值?
  • @tehhowch 我是这个脚本的新手,我将它们相乘以获得百分比形式的结果。你能描述一下你所说的第二行是什么意思吗?
  • @AMolina 你的意思是定义硬编码范围,然后为每个单元格设置值?
  • @Damien 您可以使用setValues() 方法(Documentation here)来更改整个范围内的值,您将一个与范围匹配的二维数组传递给它,并且值在工作表,它可以是一种更舒适的使用方式。

标签: google-apps-script google-sheets


【解决方案1】:

试试:

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

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

只有datarange[j] 会给你整行。

【讨论】:

  • 我试过你的建议,但仍然是同样的问题。我想澄清一下,我正在尝试使用第一种方法“GetFilteredData()”返回数据。您的意思是仅在这一特定行中实施此更改?
  • 您需要共享一张包含示例数据的表格。代码不明显。比如range.filter(String).length中的string是什么?
  • 我认为关键是输出需要是一个二维数组。请参阅developers.google.com/apps-script/guides/sheets/… 中的示例。例如,此函数将返回一个二维数组。函数 getNumbers() { 返回 [ [ 1, 2 ], [ 2, 3 ] ]; }
  • @ADW 我会在某个时候发送示例文件。 range.filter(String).length 用于获取最后一行或单列中的计数。这是我从互联网上获取的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-24
相关资源
最近更新 更多