将多列同类项整理到一列
例题描述和简单分析
有Excel文件Book1.xlsx,数据如下所示:
A | B | … | H | I | … | |
1 | 4/1/2021 | 4/1/2021 | … | 4/2/2021 | 4/2/2021 | … |
2 | AAA | BBB | … | AAA | BBB | … |
3 | 6 | 9 | … | 9 | 10 | … |
4 | 8 | 6 | … | 10 | 7 | … |
5 | 3 | 2 | … | 2 | 3 | … |
… | … | … | … | … | … | … |
需要将多列同类项整理到一列,结果如下所示:
A | B | C | D | … | |
1 | AAA | 时间 | BBB | 时间 | … |
2 | 6 | 4/1/2021 | 9 | 4/1/2021 | … |
3 | 8 | 4/1/2021 | 6 | 4/1/2021 | … |
… | … | … | … | … | … |
8 | 9 | 4/2/2021 | 10 | 4/2/2021 | … |
9 | 10 | 4/2/2021 | 7 | 4/2/2021 | … |
… | … | … | … | … | … |
解法及简要说明
在集算器中编写脚本p1.dfx,如下所示:
A | |
1 | =file("Book1.xlsx").xlsimport@w() |
2 | =transpose(A1).group(~(2)) |
3 | =A2.(~.conj(~.m(3:).select(~).(~|A2.~.~(1)))) |
4 | =transpose(A3).(~.conj()) |
5 | =A2.conj(~.~(2)|"时间") |
6 | =file("result.xlsx").xlsexport@w([A5]|A4) |
简要说明:
A1 Excel读成序列的序列
A2 转置A1,按第二列(类别)分组
A3 遍历每组(类别),合并每天的数与当天日期组成的序列
A4 转置A3,合并每行序列
A5 拼表头
A6 表头并数据的结果导出至result.xlsx
http://club.excelhome.net/thread-1587358-1-1.html