当前位置: 首页 > 知识库问答 >
问题:

我可以在谷歌表单中使用自定义js函数作为过滤单元函数吗

蔡辰钊
2023-03-14

我正在尝试使用脚本中的自定义js函数作为GoogleSheets中过滤单元函数的条件。

示例:=FILTER(A1: A25;颜色相同(A1: A25; 10澳元))

colorsame返回true/false(一个值或数组,基于范围大小)。

自定义函数单独工作得很好,比如=colhalone(A1: A25; 10澳元)填充该列。但是在上面的=FILTER()中,我总是有这个错误:

FILTER has mismatched range sizes. Expected row count: 25. column count: 1. Actual row count: 1, column count: 1.

我尝试用谷歌搜索这个问题,但只得到了基于内置谷歌表格功能的FILTER解决方案。此外,我试图将此函数与筛选器和条件格式“自定义公式”字段集成,但没有成功。

自定义函数代码:

color返回所提供单元格或区域的背景色。

function color(input) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();

  // get 'input' address by metascanner
  var formula = ss.getActiveRange().getFormula();
  var rangeA1Notation = formula.match(/\((.+)\)/).pop();

  var cell = ss.getRange(rangeA1Notation);
  var bg = cell.getBackgrounds();
  return bg;
}

colorsame返回真值表,该表显示输入范围的背景色与color单元格的背景色相同。

function colorsame(input, color) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();

  // get 'input' address by metascanner
  var formula = ss.getActiveRange().getFormula();
  var matches = formula.match(/\((.+);(.+)\)/);
  var rangeA1Notation = matches[1];
  var colorA1Notation = matches[2].trim();

  var color = ss.getRange(colorA1Notation).getBackground();
  var bgs = ss.getRange(rangeA1Notation).getBackgrounds();
  var truthTable = bgs.map(function(bg) { return bg == color });
  return truthTable;
}

共有2个答案

刘安志
2023-03-14

您可以从自定义函数返回布尔值数组,该数组将指示过滤后将显示哪些单元格。

我的问题是试图用regexp解析单元格内容以检索单元格地址。它适用于像=colorsame(A1:A25;$A$10)这样的公式,但不适用于内部过滤器

此版本仅适用于过滤器

function colorsame(input, color) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  // get 'input' address by metascanner
  var formula = ss.getActiveRange().getFormula();
  var matches = formula.match(/colorsame\((.+?);(.+?)\)/);

  var rangeA1Notation = matches[1].trim();
  var colorA1Notation = matches[2].trim();

  var color = ss.getRange(colorA1Notation).getBackground();
  var isSame = function(col) { return col === color; };

  var bgs = ss.getRange(rangeA1Notation).getBackgrounds();
  var truthTable = bgs.map(function(bg) { return bg.map(isSame); });

  return truthTable;
}
申黎明
2023-03-14

这可能是有用的,以查看您的颜色相同函数的代码,但与此同时,你有没有尝试

=ArrayFormula(FILTER(A1:A25; colorsame(A1:A25; $A$10)))
 类似资料:
  • 我创建了一个链接到GoogleSheets表的google表单。提交后,表格中的数据将更新链接表中的A-D列。现在,我需要一个自定义脚本在提交时调用外部API,并将响应中的数据写入列E。我尝试调用weather API,以便在用户提交表单时记录天气数据。 下面是我用来从公共MetarAPI获取温度的函数,当我从打开的google sheet文档中的一个单元格调用它时,它工作得很好。我无法从谷歌文档

  • 本文向大家介绍Python过滤函数filter()使用自定义函数过滤序列实例,包括了Python过滤函数filter()使用自定义函数过滤序列实例的使用技巧和注意事项,需要的朋友参考一下 filter函数: filter()函数可以对序列做过滤处理,就是说可以使用一个自定的函数过滤一个序列,把序列的每一项传到自定义的过滤函数里处理,并返回结果做过滤。最终一次性返回过滤后的结果。 filter()函

  • 在我的控制器中,我想过滤一个对象数组。这些对象中的每一个都是一个映射,可以包含字符串和列表 我尝试使用< code>$filter('filter')(array,function)格式,但是我不知道如何在我的函数中访问数组的各个元素。这里有一个片段显示了我想要的。 然后在中,我将检查每个单独的属性是否匹配 我必须在控制器中完成所有这些操作,并编译一个列表列表并在范围内设置它们。因此,我确实需要以

  • 我正在尝试编写一个简单的数据库函数来从表中检索值。 MariaDB只是给出以下消息 在“开始声明标题VARCHAR DEFAULT”附近,在第2行的标题FR中选择MyTitle 我看不出有什么不对。请帮忙。 谢谢你

  • 我使用Thiago Mata的自定义Google Sheets函数来搜索和替换字符串中的多个单词。 Thiago的函数可以在这里找到 实际上,我使用他的函数替换关键字与相应的超链接。 原始字符串存储在列示例!A: A.关键字替换html对存储在另外三个表中:垂直表、水平表和技术表。 例如,在原始字符串中找到的每个“Authors”实例都替换为 这是一张谷歌表格,显示了我正在尝试做的事情(在原始数据

  • 让我试着解释一下我的问题。 > 我有一个图像在我的驱动器URL="https://drive.google.com/open?id=0B7Qr0kRr6yOOLXB1OE5lUUxBRjQ" 我把它改成了“https://drive.google.com/uc?export=download 替换为“打开?id"with"uc?导出=下载 第一张!A5当我使用=图像(A1,1)时,它不起作用。 但