如何使用List.Alternate函数规整Excel中重复3列的表格?
提取重复多组列并合并为标准三列表格(Power Query方案)
核心思路
通过列索引分组提取对应列,再将同类型列的数据纵向合并,最终生成仅含「问题」「答案」「类别」的表格。
具体步骤(Power Query编辑器中操作)
加载数据到Power Query
选中Excel表格数据,点击「数据」选项卡 → 「从表格/区域」,进入Power Query编辑器。实现列提取与合并
打开「高级编辑器」,替换原有代码为以下逻辑(注意替换表格名称为你的实际表名):let 源 = Excel.CurrentWorkbook(){[Name="表1"]}[Content], // 替换"表1"为你的表格名称 列名列表 = Table.ColumnNames(源), // 按索引分组提取三类列 问题列列表 = List.Select(列名列表, (col) => List.PositionOf(列名列表, col) mod 3 = 0), 答案列列表 = List.Select(列名列表, (col) => List.PositionOf(列名列表, col) mod 3 = 1), 类别列列表 = List.Select(列名列表, (col) => List.PositionOf(列名列表, col) mod 3 = 2), // 合并同类型列的所有数据为单列表 合并问题列 = List.Combine(Table.ToColumns(Table.SelectColumns(源, 问题列列表))), 合并答案列 = List.Combine(Table.ToColumns(Table.SelectColumns(源, 答案列列表))), 合并类别列 = List.Combine(Table.ToColumns(Table.SelectColumns(源, 类别列列表))), // 创建最终表格 结果表 = Table.FromColumns({合并问题列, 合并答案列, 合并类别列}, {"问题", "答案", "类别"}) in 结果表可选:过滤空行
若需要移除所有字段均为空的行,在结果表步骤后添加:过滤空行 = Table.SelectRows(结果表, each not List.IsEmpty(List.RemoveNulls({[问题],[答案],[类别]})))并将
in后的内容改为过滤空行。加载回Excel
点击「关闭并上载」,将处理后的表格导入Excel。
补充说明
List.Alternate更适合单列表的间隔提取,而你需要同时处理3组间隔列,用列索引分组+合并的方式逻辑更直观,也更容易根据实际列位置调整规则。
内容的提问来源于stack exchange,提问作者Cust-Omer
相关产品推荐
相关产品推荐

