1.3 基本数据类型
润乾报表中的基本数据类型:整数、长整数、浮点数、长实数、实数、布尔型、字符串、日期/时间
- 长实数
=decimal("5.2")
- 长实数可以无误差地存储任何实数,但是使用长实数计算时,需要消耗更多的内存,且计算的效率较低
- 实数
=number("3.14")
- 实数包括整数、长整数、浮点数、长实数
- 日期/时间
=date("12/28/1972", "MM/dd/yyyy")
=time("00/00/45", "hh/mm/ss")
=datetime("12/28/1972 10:23:43", "MM/dd/yyyy HH:mm:ss")
- 不用函数时,要写成 yyyy-mm-dd 和 hh:mm:ss 形式
- 设置默认日期格式:工具-选项-环境-时间/日期格式
- 字符串
-
=string(3456.78,"$#,##0.00")
// 意为 $3,456.78 - 使用表达式时,用双引号括起来,其中转义字符用\
- 两个字符串合并时,也可以直接用加法,写作x+y,但是此时x与y必须均为字符串。如果字符串与实数相加,字符串将被忽略
- 如果需要将实数作为字符串,与其它字符串连接,可以用x/y,来计算,此时如果x与y其中之一为字符串,结果即为字符串
-
1.5 单元格类型
单元格颜色设定:工具 - 选项 - 外观
1.5.1 常数格
- 3% 的写法不能在表达式中使用,仅在常数格中有效
- 常数格的文字缺省会显示成粉色
- 字符串常数格的格串是以英文单引号'开头的。使用字符串常数格时,如果字符串中存在特殊字符,不必添加转义符\
1.5.3 计算格
- 以=开头的计算表达式的单元格称为计算格
- 计算格文本缺省显示成黑色
- 执行代码后,计算格底色变成淡黄色,表明该格已经计算出格值
1.5.4 执行格
- 格串以>开头的单元格称为执行格
- 执行格没有格值
- 当执行格以保留字作为开头时,如if、for等,>省略不写
1.5.5 注释格
- 以/开头的单元格称为注释格,其格值为空
- 注释格文本缺省显示成绿色
1.6 多层次参数
冒号(成对的属性与值)、逗号(级别平等的参数)、分号(长参数中用来分组)作为函数参数的分隔符,优先级依次降低。
- 用冒号分隔的参数,如果使用缺省模式,可以省略参数不写
-
between(B1+B2,180:)
和between(B1+B2,:120)
分别表示 B1+B2>=180,以及 B1+B2<=120
-
- 用逗号分隔的参数,如果使用缺省模式,可以省略参数不写
-
=A1.to(4,)
相当于=A1.to(4,A1.len())
-
- 用分号分隔的参数,如果分号后方再没有参数,则对应的分号也不必写
- 如 A.top() 函数中不设定 n,只取第 1 位
1.7 函数选项
- 注意
- 可以同时使用多个允许共用的选项,选项之间没有次序
- 有些函数选项是互相冲突的,不能同时使用,如 @a 和 @1,或者 f.import() 的选项 @t 与 @b 等
- 同样的选项,在不同的函数中可能代表不同的含义。如 @a 用在定位函数中表示返回全部,而用在写文件函数 f.write() 或 f.export() 中时,表示追加
- 常用的函数选项
-
@1
返回找到的第一个结果 -
@a
返回满足条件的所有结果 -
@z
与顺序有关(默认从大到小从后向前) -
@b
在定位与选择函数中表示使用二分法查找(有序序列);在读写函数中表示二进制文件
-
1.8 使用常见数据
- 文本数据
- 使用
file(employee.txt)
来连接文本数据 - 使用
import()
读取数据
- 使用
- 数据库数据
- 若在数据源管理器中点击了“连接”按钮,则可在单元格中直接使用
=DataBase_Name.query(SQL_Expression)
,也可以使用$SQL_Expression
进行数据库操作 - 若没有在数据源管理器中点击“连接”按钮,则可使用
=connect(DataBase_Name)
先连接数据库,再进行数据库操作。最后记得用>A1.close()
关闭连接
- 若在数据源管理器中点击了“连接”按钮,则可在单元格中直接使用
1.9 JDBC 基本使用
可以将集算器看做一个存储过程,在其他 Java 应用中通过 JDBC 连接调用。
2.1 集合运算符
2.1.1 集算器的二元运算
-
A|B
和列:将两个序列简单合并成一个序列 -
A&B
并列:求两个序列的并集序列 -
A^B
交列:求两个序列的交集序列 -
A\B
差列:求包含于 A 但不包含于 B 的序列(注意区别于字符串的连接操作 x/y) -
k*A
k 个 A 的和列
2.1.2 集算器的对位运算
只适用于数值构成的序列,且两个序列长度相等
-
A++B
:A(n)+B(n) -
A--B
:A(n)-B(n) -
A**B
:A(n)×B(n) -
A//B
:A(n)÷B(n) -
A%%B
:A(n)%B(n),取余运算 -
A\\B
:A(n)+B(n),整数除法
2.1.3 集合的比较
cmp(A,B)
对位比较每个成员的值
- 若长度一样且每一位值都相等,则返回 0
- 遇到第一个不等成员时若 A(n)>B(n) 则返回 1,否则返回 -1
- 若两个序列长度不等,则运算逻辑会将短的序列后面补 0 使其与长的序列长度相同
- 注意:A 或 B 不一定是纯数值序列,其值也可以是字符串。字符串与字符串的比较或与数值的比较待验证
2.2 分支流程
- 分支流程中,带有 if 和 else 关键字的单元格不用加 “>”。其他逻辑运算单元格也是这样(带有关键字的单元格不用加 “>”)。
- if 和 else 这两个关键字要么写在同一行(简单的分支判断),要么写在同一列(复杂的代码块)
- 简单的分支判断可以用函数
if([Condition], [True_Value], [False_Value])
来代替
2.3 循环流程
- for 无条件循环,不太理解
-
for A
:循环序列中的每个成员 -
for n
:循环执行 n 次,相当于for(i=0; i<n; i++)
-
for a,b,step
:相当于for(i=a; i<b+1; i=i+step)
,其中 step 缺省时为 1 -
for Condition
:相当于while(Condition)
2.4 序列与列表的概念
2.4.1 序列
-
集合性
序列具有集合的一般特性
-
泛型性
序列成员可以是任意的数据类型。当序列中都是整数时,也被称为数列
-
有序性
成员一样但顺序不同的两个集合不相等
2.4.2 序表
序列是一维的,序表是二维的。序表是有姐共的序列
2.4.3 排列
- 排列是对序表记录的引用,区别于实体数据(类似于指针)
- 修改序表会影响排列(类似于修改实体表会影响视图)
2.5 序列的使用
2.5.1 生成序列
- 常数构造:中括号表示法
- 函数构造:
to(a,b)
,String.array()
,periods(Date_From, Date_To)
,file("sales.txt").import@t()
- 计算生成:从数据源读取序表后,通过计算得到序列
2.5.2 访问序列
- 按序号访问:
A(n)
,A.m(n)
- 倒取数时必须用A.m()函数,不能简写为A1(-1)
- 赋值或修改:
A.(n)=New_Value
,A.modify()
- 新增成员:
A.insert()
- 删除成员:
A.delete()
2.5.3 序列的运算
序列的运算符合集算器中集合运算的所以规则