Power Query按指定数值复制列并添加索引的需求
用Power Query实现按指定数量复制列并添加索引
示例原始数据
假设你的表格结构如下(最后一行为各列需要复制的数量):
| 列A | 列B | 列C |
|---|---|---|
| 值A | 值B | 值C |
| 3 | 2 | 4 |
操作步骤
- 把表格导入Power Query:选中表格,点击「数据」选项卡 → 「从表格/区域」
- 分离数据行与数量行:假设数量行是最后一行,执行以下M代码片段拆分数据:
// 获取总行数 totalRows = Table.RowCount(Source), // 提取数量行(最后一行) countRow = Table.Last(Source), // 提取数据行(除最后一行外的所有行) dataRows = Table.RemoveLastN(Source, 1) - 按数量复制列并添加索引:遍历每一列,根据数量行的数值生成带索引后缀的重复列:
// 遍历所有列生成复制后的列集合 transformedColumns = List.Transform(Table.ColumnNames(dataRows), (colName) => let // 获取当前列的复制次数 copyCount = countRow[colName], // 生成带索引的列名和对应值 copiedCols = List.Generate( () => [Index=1, ColName=colName & "_" & Text.From(1), Value=dataRows[colName]{0}], each [Index] <= copyCount, each [Index=[Index]+1, ColName=colName & "_" & Text.From([Index]), Value=dataRows[colName]{0}], each [ColName, Value] ), // 转成表格格式 colTable = Table.FromRecords(copiedCols) in colTable ), // 合并所有生成的表格 finalTable = Table.Combine(transformedColumns) - 加载结果:点击「关闭并上载」,即可得到目标表格。
适配说明
- 如果数量行不是最后一行,将
Table.Last(Source)替换为Table.Rows(Source){n}(n为目标行的索引,从0开始计数) - 如果原始表格有多行数据,需要修改
dataRows[colName]{0}部分,添加嵌套循环实现每行数据的批量复制
内容的提问来源于stack exchange,提问作者hadji
相关产品推荐
相关产品推荐

