一行拆成多行

例题描述和简单分析

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