找出同分类下的相邻行

举例

下面的 Excel 中,Block 相同的行属于同一组。

Block

Bench

4

1

5

1

6

1

4

8

5

8

6

8

4

9

5

9

6

9

4

5

5

5

6

5

目标:计算出 2 个新列,BenchAbove 为同一组内的上一行的 Bench,如果本行为第 1 行,则 BenchAbove 为空。BenchBelow 为同一组内的下一行的 Bench,如果本行为最后 1 行,则 BenchBelow 为空。结果如下:

Block

Bench

BenchAbove

BenchBelow

4

1


8

5

1


8

6

1


8

4

8

1

9

5

8

1

9

6

8

1

9

4

9

8

5

5

9

8

5

6

9

8

5

4

5

9


5

5

9


6

5

9


这类问题的难点是:在不改变行顺序的前提下,获取同一组内的上一行下一行。

编写 SPL 脚本:


A

1

=file("data.xlsx").xlsimport@t()

2

=A1.derive(~[:-1].select@1z(Block==A2.Block).Bench:BenchAbove,

~[1:].select@1(Block==A2.Block).Bench:BenchBelow)

3

=file("result.xlsx").xlsexport@(A2)

A1  读取 Excel 数据

A2  获取相邻行,~[:-1] 获取当前行之前的所有行,~[1:] 则是当前行之后的所有行,select 用于查找,@z 表示从后往前找,@1 表示找到 1 条就结束。

A3  结果导出至 result.xlsx