You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改Google Sheets的CARTESIAN_PRODUCT函数,添加每行列数参数?

实现带列数限制的Google Sheets笛卡尔积命名函数

你可以通过新增参数r实现需求,以下是修改后的命名函数,支持从输入范围中生成指定列数的所有笛卡尔积组合:

命名函数代码

创建名为CARTESIAN_PRODUCT_R的命名函数,参数设为range(输入数据范围)和r(结果每行的列数):

=LET(
  // 提取每列的非空值
  filtered_cols, BYCOL(range, LAMBDA(col, IFNA(FILTER(col, col <> "")))),
  total_cols, COLUMNS(range),
  // 生成所有r列的组合索引
  column_combos, COMBINATIONS(SEQUENCE(total_cols), r),
  // 为单个列组合生成笛卡尔积的逻辑
  generate_cartesian, LAMBDA(combo,
    REDUCE(INDEX(filtered_cols,, INDEX(combo, 1)), SEQUENCE(r - 1), LAMBDA(acc, idx,
      LET(
        next_col, INDEX(filtered_cols,, INDEX(combo, idx + 1)),
        // 生成两集合的笛卡尔积
        cross_join, FLATTEN(ARRAYFORMULA(
          INDEX(acc, SEQUENCE(ROWS(acc)), SEQUENCE(1, COLUMNS(acc))) & "§" &
          INDEX(next_col, SEQUENCE(ROWS(next_col)), SEQUENCE(1, COLUMNS(next_col)))
        )),
        cross_join
      )
    ))
  ),
  // 批量生成所有列组合的笛卡尔积
  all_cartesian, BYROW(column_combos, generate_cartesian),
  // 拆分临时分隔符并整理结果
  split_results, BYROW(all_cartesian, LAMBDA(row, SPLIT(row, "§"))),
  // 合并所有结果
  VSTACK(split_results)
)

使用示例

  • 若输入数据在A:C列,要生成2列的笛卡尔积:=CARTESIAN_PRODUCT_R(A:C, 2)
  • 若输入数据在A:D列,要生成3列的笛卡尔积:=CARTESIAN_PRODUCT_R(A:D, 3)

关键说明

  • 自动过滤输入列中的空值,避免生成无效组合
  • 使用§作为临时分隔符,若你的数据包含该字符,可替换为其他不常用字符(如|、♦)
  • 当r=1时,返回所有列的非空值合并结果;当r等于输入列数时,效果与原CARTESIAN_PRODUCT函数完全一致

内容的提问来源于stack exchange,提问作者Iceman6425

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 20:50:28