一行拆成多行
例题描述和简单分析
有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