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”按钮,如下图:
在 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 键控制计算结果是否带列名。