一行拆成多行
例题描述和简单分析
有Excel文件Book1.xlsx,数据如下所示:
A | B | C | |
1 | Rank | model | OE # |
2 | 1 | CHEVROLET | 15782690, 20784686, 88876439, 22608427, 22670300, 22710286, 227610286, 25846008 |
3 | 2 | CADILLAC | 15047200, 15864153, MS20268 |
4 | 3 | JEEP | 04746696, 4746696, 68004085AA, 83500202, 8983500202 |
5 | … | … | … |
需要将OE #列(C列)中的串拆分到多行,结果如下所示:
结果1:
A | B | |
1 | CHEVROLET | 15782690 |
2 | CHEVROLET | 20784686 |
3 | CHEVROLET | 88876439 |
4 | CHEVROLET | 22608427 |
5 | CHEVROLET | 22670300 |
6 | CHEVROLET | 22710286 |
7 | CHEVROLET | 227610286 |
8 | CHEVROLET | 25846008 |
9 | CADILLAC | 15047200 |
10 | … | … |
结果2:
A | B | |
1 | CHEVROLET | 15782690 |
2 | 20784686 | |
3 | 88876439 | |
4 | 22608427 | |
5 | 22670300 | |
6 | 22710286 | |
7 | 227610286 | |
8 | 25846008 | |
9 | CADILLAC | 15047200 |
10 | … |
解法及简要说明
结果1的解法:
在集算器中编写脚本p1.dfx,如下所示:
A | |
1 | =file("Book1.xlsx").xlsimport@t() |
2 | =A1.news(#3.split@ct());A1.#2,~) |
3 | =file("result.xlsx").xlsexport(A2) |
简要说明:
A1 Excel读成序表
A2 第三列的串值按逗号分隔,转成序列(注意去掉字符串两端的空串),用A1的第二列和该序列生成新序表
A3 结果导出至result.xlsx
结果2的解法:
在集算器中编写脚本p1.dfx,如下所示:
A | |
1 | =file("Book1.xlsx").xlsimport@t() |
2 | =A1.news(#3.split@ct());A1.#2,~) |
3 | >A2.run(if(#==1:tmp=#1,#1==tmp:#1=null;tmp=#1)) |
4 | =file("result.xlsx").xlsexport(A2) |
简要说明:
A1 Excel读成序表
A2 第三列的串值按逗号分隔,转成序列(注意去掉字符串两端的空串),用A1的第二列和该序列生成新序表
A3 遍历A2,若行数是1,设网格变量tmp为当前行的第一个字段值,若当前行的第一个字段值等于tmp,则当前行的第一个字段值赋空值;否则tmp为当前行的第一个字段值
A4 结果导出至result.xlsx
http://club.excelhome.net/thread-1587340-1-1.html