3.3 多个结果片区

 

clipboard(…) 只能返回一个结果,但有些较复杂的运算可能需要返回多个结果,这该怎么办呢?

在集算器的结果显示区可以直接把多个格值(或变量值)分别复制到剪贴板,并依次返回 Excel。

下面用 “各科前 3 名和每个人的超越目标”为例进行说明。

计算目标:在学生成绩单的基础上,不仅在各科目下面追加当前科目前 3 名的学生,而且需要新加一列 target,计算出比本人总分略高的 3 名学生的名单列表,作为本人应当超越的目标。注意,有些人的超越目标不足 3 人,每个超越目标之间须用 > 号连接。

先在 Excel 中选中源片区 (A1:D10),按 Ctrl+C 复制到系统剪贴板,打开集算器,编写并执行如下脚本:

A B C
1 =clipboard@e().import@t()
2 =A1.top(-3;math).(name) =A1.top(-3;english).(name) =A1.top(-3;physics).(name)
3 =join@p(A2;B2;C2)
4 =A1.derive(sum(math,english,physics):subtotal)
5 =A4.derive(t=subtotal,A4.select(subtotal>t):beforeMe)
6 =A5.new(beforeMe.top(3;subtotal).(name).concat(“>”):target)

A1 从剪切板获取数据
A3 片区 1:各科前 3 名
A4 每个人的总分
A5 排在本人前面的学生
A6 片区 2:最近 3 名学生

A3 存储结果片区 1,即当前科目前 3 名的学生;A4 存储结果片区 2,即每个人的超越目标。另外应当注意到,代码中无须 export()和 clipboard(…)。

现在将计算结果返回到 Excel。

先点击片区 1,再点击右侧对应的“copy data”按钮,如下图:

imagepng

在 Excel 的 B11 格用 Ctrl+V ,即可将片区 1 复制到 B11-D13 ,如下:

A B C D
1 name math english physics
2 Lily 97 100 99
3 Joshua 100 99 100
4 Sarah 98 99 96
5 Bertram 94 95 85
6 Paula 91 88 91
7 Sophia 92 81 76
8 Ben 87 80 76
9 Ruth 92 91 87
10 Pag 95 87 87
11 Joshua lily Joshua
12 Sarah Sarah lily
13 lily Joshua Sarah

再点击脚本中的片区 2,按住 Shift 键,同时点击右侧对应的“copy data”按钮,之后在 Excel 的的 E1 格按下 Ctrl+V,可将片区 2 连带列名复制到 E1:E10。如下所示:

A B C D E
1 name math english physics Target
2 Lily 97 100 99 Joshua
3 Joshua 100 99 100
4 Sarah 98 99 96 lily>Joshua
5 Bertram 94 95 85 Sarah>lily>Joshua
6 Paula 91 88 91 Bertram>Sarah>lily
7 Sophia 92 81 76 Pag>Ruth>Paula
8 Ben 87 80 76 Sophia>Pag>Ruth
9 Ruth 92 91 87 Bertram>Sarah>lily
10 Pag 95 87 87 Ruth>Paula>Bertram
11 Joshua lily Joshua
12 Sarah Sarah lily
13 lily Joshua Sarah

我们可通过 Shift 键控制计算结果是否带列名。


帮你早下班 - esProc 桌面版与 Excel 数据处理
3.2 随意编辑脚本
3.4 多个源片区