例1
Excel文件book1.xlsx记录学生成绩,部分数据如下图所示:

现在要排出学生数学成绩排名,成绩相同的姓名用逗号连接起来,结果如下图所示:

编写SPL脚本:
| A | |
| 1 | =T("E:/work/book1.xlsx") |
| 2 | =A1.group(Maths).(~.(Name).concat@c()).rvs() |
| 3 | =A2.new(#:Rank,~:Name) |
| 4 | =T("E:/work/book2.xlsx",A3) |
A1 读入book1.xlsx文件数据
A2 按Maths分组,循环每一组,将组内学生的姓名用逗号连接成串,最后再用rvs函数倒序排列
A3 用A2构造新的数据集,行号#命名为Rank字段,A2中当前行的姓名串命名为Name字段
A4 把A3保存到文件book2.xlsx
例2
Excel文件book1.xlsx记录着一些人的4项指标评分,部分数据如下图所示:

现在要求从F列开始填写,规则:按照指标值从大到小的顺序(逆序),依次填入指标名,若指标值相同,则用逗号连接起来,填入同一格,如下图所示:

编写SPL脚本:
| A | |
| 1 | =clipboard().split@n("\t") |
| 2 | =A1.to(2,).(~.group@p(~).rvs()) |
| 3 | =A2.(~.(A1(1)(~).concat@c())) |
| 4 | =A3.concat@n("\t") |
| 5 | =clipboard(A4) |
A1 读入剪贴板字符串,并先用\n拆分后再用\t拆分,最后变成序列的序列
A2 从A1的第2行开始,循环每一行。对行内序列进行分组,选项@p表示分组后取出成员在原序列中的位置编号。最后再用rvs函数倒序排列
A3 循环A2中每一行,用每一组的成员位置编号到A1中第1行取出对应的指标名用逗号连接起来
A4 把A3中的序列行之间用\n连接,行内成员用\t连接成字符串
A5 把A4中的字符串放进剪贴板中
先打开book1.xlsx文件,选择B2:E3区域,按Ctrl+c复制,然后再运行SPL脚本,运行结束后回到Excel,点击F2单元格,按Ctrl+v将结果粘贴过来。
本文通过两个例子展示了如何使用SPL脚本来处理并列排名的情况。在例1中,SPL脚本读取Excel文件,按数学成绩分组并将相同成绩的学生姓名用逗号连接,然后倒序排列。在例2中,脚本处理包含多个指标评分的数据,按指标值逆序排列,相同值则用逗号连接在同一格。
686

被折叠的 条评论
为什么被折叠?



