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

如何在Google Sheets中实现多列数据转多行(类Union效果)

在Google Sheets中实现多列转多行(类似SQL Union效果)

原始数据

Col1Col2Col3Col4Col5Col6Col7
PersonInfo1Info2Info3Item1Item2Item3
Person110-12Mgreenballtruckbook
Person23-5Myellownecklacedollstroller

目标格式

PersonInfo1Info2Info3Item
Person110-12Mgreenball
Person110-12Mgreentruck
Person110-12Mgreenbook
Person23-5Myellownecklace
Person23-5Myellowdoll
Person23-5Myellowstroller

解决方案

方法1:用QUERY模拟SQL Union逻辑

假设原始数据位于A1:G3(表头在第1行),在空白单元格输入以下公式:

=QUERY({
  QUERY(A2:G, "select Col1,Col2,Col3,Col4,Col5 where Col1 is not null", 0);
  QUERY(A2:G, "select Col1,Col2,Col3,Col4,Col6 where Col1 is not null", 0);
  QUERY(A2:G, "select Col1,Col2,Col3,Col4,Col7 where Col1 is not null", 0)
}, "select * where Col1 is not null", 0)

执行后会生成无表头的结果,手动添加Person、Info1、Info2、Info3、Item表头即可。

方法2:用ARRAYFORMULA+FLATTEN一键生成

如果需要更简洁的公式,可利用FLATTEN展开多列,同时重复前置信息:

=ARRAYFORMULA({
  SPLIT(FLATTEN(REPT(A2:A&"|"&B2:B&"|"&C2:C&"|"&D2:D&"|", 3)), "|"),
  FLATTEN(E2:G)
})
  • REPT函数将每行的前置信息重复3次(对应3个Item列),用|分隔方便后续拆分
  • FLATTEN将重复后的信息和Item列都转为单行序列
  • SPLIT把分隔的前置信息拆回多列,最终直接生成完整的内容行,最后添加表头即可

如果后续Item列数量变化,只需修改REPT的第二个参数(改为Item列的数量),同时调整FLATTEN的范围(比如E2:H对应4列)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 20:06:23