一行拆成多行

例题描述和简单分析

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