Google Sheets 按条件扁平化表格为两列并追加邮箱自匹配行
问题背景
- 表格存有结构化的示例数据,当前需要将二维标记表扁平化为两列的配对数据
- 原有使用的扁平化公式如下:
=INDEX(QUERY(SPLIT(FLATTEN(IF(SheetName!B1:D=TRUE, SheetName!B1:D1&"×"&SheetName!A1:A,)), "×"),"where Col2 is not null order by Col1 asc"))
- 原有公式可以正常输出标记为TRUE的列属性与对应行邮箱的配对结果,但未覆盖需要追加的自配对行
具体需求
在原有扁平化输出的两列结果基础上,额外追加每个邮箱自身配对的行,格式为邮箱地址 | 邮箱地址,即对A列的每个邮箱,都生成一条邮箱×邮箱的配对记录,和原有逻辑生成的配对记录合并后统一排序输出。
此前尝试调整IF/IFS判断逻辑、使用通配符匹配等方案,均未实现预期效果。
补充说明:已准备好包含示例原始数据、现有公式输出结果、预期输出结果的样例表格,公式输入位置为H2单元格。
实现方案
直接在原有公式的FLATTEN函数中追加邮箱自拼接的数组参数即可,无需改动后续拆分、过滤、排序逻辑,修改后完整公式如下:
=INDEX(QUERY(SPLIT(FLATTEN(IF(SheetName!B1:D=TRUE, SheetName!B1:D1&"×"&SheetName!A1:A,),SheetName!A1:A&"×"&SheetName!A1:A), "×"),"where Col2 is not null order by Col1 asc"))
逻辑说明
- FLATTEN函数支持接收多组数组参数,会自动将多组数组合并后展开为一维列
- 第一组参数保留原有逻辑:仅当B:D列的单元格值为TRUE时,拼接对应列头和该行A列的邮箱
- 第二组参数为新增的自配对逻辑:直接拼接每行A列的邮箱和自身,不需要加判断条件,所有行都会生成对应自配对记录
- 后续通过SPLIT按分隔符
×拆分为两列,再通过QUERY过滤空值、按第一列升序排序,即可得到完全符合需求的结果 - 如果输出结果存在重复行,可将QUERY语句修改为
"where Col2 is not null group by Col1,Col2 order by Col1 asc"实现自动去重
内容的提问来源于stack exchange,提问作者Michael Winthrop
相关产品推荐
相关产品推荐

