2.3 编辑 SPL 代码

 

某些计算的 SPL 表达式可能很复杂,甚至不止一句,直接在 Excel 中编辑时很不方便,集算器提供了Excel Copy/Paste功能,可以将编辑好的代码复制到 Excel 中使用。

2.3.1 用集算器生成复杂 SPL 脚本

有 Excel 数据文件如下所示:

imagepng

现在需要在底下增加一行,计算 1 月份中,每个小时的取样数据的平均值,希望写一个表达式,就把整行的平均值都算出来,不需要每个格子都复制一遍表达式。

计算结果如下所示:

imagepng

本例需要把 B2:Y33 作为参数,打开集算器,定义参数如下:

imagepng

注意:这里参数名称必须是B2:Y33,和 Excel 传的参数相同。

编辑脚本:

A
1 =E(‘B2:Y33’)
2 =to(24).(“avg(’”+string(~)+“‘):’”+string(~)+“’”)
3 =A1.groups(;${A2.concat@c()})
4 return A3(1).array()

A1:将传入的二维数组参数 ‘B2:Y33’ 变成序表,第一行当列名。参数名要加上单引号以和集算器的单元格区分。

A2:动态拼出 24 个列的汇总表达式。

A3:将汇总表达式拼入 groups 函数里,算出所有列的平均值。

A4:将结果转成单层序列并返回。

接着点击菜单【编辑】->【复制】->【Excel 复制】,此时即可把代码复制到剪贴板上。

imagepng

回到 Excel 文件,在单元格 B34 中,按 Ctrl-V 即可把代码粘贴进来,如下所示:

imagepng

此代码返回的是一维数组,按 Ctrl-Enter,把返回数组值按顺序向右填到一行单元格上,最后结果如下所示:

imagepng

补充说明

1、当返回结果为一维数组时,按 Ctrl-Enter 后结果集向右按顺序填充单元格

2、当传给 SPL 脚本的参数是一片 (单行、单列、多行多列) 单元格时,会自动组成两层序列,此时在 SPL 脚本中可以用 E() 函数转成序表。

3、参数规则和单行代码一样,用?1 表示第一个参数,?2 表示第二个参数,依此类推。

4、在 SPL 的脚本中,作为参数的 Excel 单元格(或片区)会用单引号括起来。

2.3.2 返回集算器中修改脚本

接上例,代码复制到 Excel 中使用后,我们可能把集算器关了,代码也没有保留,此时如果需要修改此代码,直接在 Excel 里修改不方便,就可以用集算器的 Excel Paste 的功能把 SPL 脚本复制回集算器中修改,操作方法如下:

在 Excel 中选中 SPL 完整代码,按 Ctrl-C 把代码复制到剪贴板上,然后打开集算器,点击菜单【编辑】->【粘贴】->【Excel 粘贴】,此时即可把代码原样恢复到集算器中,如下所示:

imagepng

imagepng

imagepng

imagepng

2.3.3 超长 SPL 脚本

现有 Employee.xlsx 文件(该文件必须放在集算器的主目录下)内容如下:

imagepng

需要对该文件做查询,查询结果只需要显示 EID,NAME,GENDER,DEPT,SALARY,BIRTHDAY,HIREDATE,STATE 这几个列,SURNAME 列不用显示,查询条件如下:

imagepng

此例中需要传到 SPL 脚本中的参数有B1, B2, D1, D2, F1, F2

打开集算器,首先定义参数如下:

imagepng

编辑脚本如下:

imagepng

用【Excel 复制】命令将代码复制进剪贴板。

再打开 Excel,在单元格 A4 中,按 Ctrl-V 把代码粘贴进来了,如下所示:

imagepng

由于 Excel 表达式中的字符串有长度限制,超长代码复制至 Excel 时会自动被拆成多段,每段长度不超过 240,代码段用 \ 结尾,表示代码尚未结束,下一个参数依旧是代码

输入完上述代码后,按 Ctrl-Enter,结果如下:

imagepng

2.3.4 直接调用 SPL 脚本文件

对于较长的 SPL 代码,也可以把 SPL 脚本写入一个文件,在 spl() 函数里直接调用。

如上例,我们把 SPL 脚本文件存为【集算器主目录】\Example15.splx,然后在 Excel 的 A4 单元格中写入如下表达式:

imagepng

从表达式中可以看出,直接调用脚本文件的语法是:

=spl("脚本文件名(?n……)",参数n….)

脚本有几个参数,括号里就写几个问号,和传入参数的对应关系规则与直接写代码是一样的,都是?1 对应第一个参数,?2 对应第二个参数,依此类推。

输入完上述代码后,按 Ctrl-Enter,结果如下:

imagepng


帮你早下班 - esProc 桌面版与 Excel 数据处理
2.2 使用 spl() 函数
3.1 基本用法