报表开发思路之单元格!(单元格扩展属性)
单元格
一、单元格
报表是有行列整齐的格子组成,这些格子我们统称为单元格,通过所有的单元格就组成了报表。类似于Excel表格中的每个格子,也相当于HTML网页中TABLE表格的TD单元格;
二、合并单元格
多个连续的单元格通过合并操作后,显示为一个大的格子,合并后的格子称为合并单元格;
三、单元格属性值和表达式
在单元格的属性中,基本包含单元格的显示值、单元格的数据值、预警变色、超链接属性(报表钻取);在这些属性中,大部分是可以自定义表达式的,在计算显示报表的时候,动态执行计算相关的属性具体值。作为表达式时是以"="字符开始的字符串。
四、数据源
用于定义报表数据来源的一个SQL语句字符串表达式;一个报表中可以定义多个数据源,数据源自己的SQL语句表达式字符串中可以使用参数(设计器中定义输入变量参数,由WEB前台传入对应的参数值)来过滤SQL语句所获取的数据;
五、参数
获取数据前用于过滤报表数据的变量,主要应用于数据源SQL语句的where条件中的变量参数的替换;从而来实现数据的筛选过滤功能;
六、内嵌控件
报表中需要使用到图片、条码(支持二维码)、图表(柱状、曲线、饼状);通过内嵌控件的属性表达式来获取相关的数据,生成对应的对象。
七、单元格属性
单元格自身所拥有的一些属性;包含外观属性、
外观属性:字体样式、边框样式、字体颜色、背景颜色、斜线、文本对齐方式、 单元格大小、合并行列
数据属性:扩展属性、左主格、上主格、数据值、显示值、预警变色、超链接等
数据属性界面如下图所示:开发人员可以设置相关的数据属性
扩展属性
扩展是单元格的一个基本属性。扩展顾名思义就是由一个单元格变成多个单元格。单元格的扩展属性包含三种:横向扩展、纵向扩展、不可扩展(默认为不可扩展);当我们定义了单元格扩展属性为横向扩展、纵向扩展时,并且单元格的表达式返回多个数据值时,该单元格即可以执行横向或者纵向复制,复制单元格的数据值依次为表达式的结果数据值,表达式返回几个值,单元格就复制几个,这种现象就称为单元格扩展;如果是横向复制,即为横向扩展,如果是纵向复制,即称为纵向扩展。
一、横向扩展
横向扩展即单元格中的数据依次从左至右的显示,即列方向的扩展,由一列变成多列模式;单元格扩展属性设置为横向扩展,同时单元格的表达式返回多个数据值时,该单元格可以横向进行复制,复制出的单元格数据值依次为表达式的结果数据值,表达式返回几个值,单元格就复制几个;此情况我们称为单元格的横向扩展。
横向扩展时,当前单元格(执行扩展的单元格)同一维度(当前所属列范围内的所有单元格)内的层次级别大于当前当前单元格层次的单元格进行复制,复制出来的新单元格的所有属性都引用被复制单元格的属性。小于等于当前单元格层次级别的单元格宽度进行延展而非复制,延展成复制后的所有单元格的宽度总和(即合并列数增加即ColSpan增加);
层次级别:依据扩展方向从根格开始计算,层次级别值越大,则此级别越小
示范实例
(1)、扩展前:
示范将B2单元格进行横向扩展,相关参数设置如下
B1: 背景色设置为黄色;上主格不设置(为空)
B2: 背景色设置为红色;设置横向扩展,上主格 设为 B1;值表达式:=to(1,3)
B3: 背景色设置为蓝色;上主格 设置为B1(即B2、B3属于同级)
B4: 背景色设置为绿色;上主格 设置为B2
备注:主格的概念在后续的主格属性中有详细介绍;横向扩展时是设置上主格,纵向扩展时是设置左主格;
(2)、扩展后:
说明:当前原始B2格进行横向扩展时,计算原始B2格同一维度(列范围)内的所有单元格层次级别:
B1单元格的上主格为空,则默认为根格[^0];那么B1的层次级别就是1;
B2单元格的上主格是B1,则B2的层次级别就是2
B3单元格的上主格是B1,则B3的层次级别就是2
B4单元格的上主格是B2,则B4的层次级别就是3
当B2进行横向扩展:执行同维度的单元格的复制与延展
B2单元格自身直接进行复制
B1的层次级别小于B2的级别,则宽度延展
B3的层次级别等于B2的级别,则宽度延展
B4的层次级别大于B2的级别,则需要复制
根据横向扩展的规则对不同的层次级别的单元格执行不同的扩展模式;
最终计算出结果后的展示效果如上图所示范。通过实例可以看出,当主格横向扩展时,跟随一起复制扩展的单元格我们定义为跟随扩展。
二、纵向扩展
纵向扩展即单元格中的数据依次从上到下的显示,即行方向的扩展,由一行变成多行模式;单元格扩展属性设置为纵向扩展,同时单元格的表达式返回多个数据值时,该单元格可以纵向进行复制,复制出的单元格数据值依次为表达式的结果数据值,表达式返回几个值,单元格就复制几个;此情况我们称为单元格的纵向扩展。
纵向扩展时,当前单元格(执行扩展的单元格)同一维度(当前所属行范围内的所有单元格)内的层次级别大于当前当前单元格层次的单元格进行复制,复制出来的新单元格的所有属性都引用被复制单元格的属性。小于等于当前单元格层次级别的单元格高度进行延展而非复制,延展成复制后的所有单元格的高度总和(即合并行数增加即RowSpan增加);
层次级别:依据扩展方向从根格开始计算,层次级别值越大,则此级别越小
示范实例:
(1)、扩展前:
示范将B2单元格进行纵向扩展,相关参数设置如下
A2: 背景色设置为黄色;左主格 不设置(为空)
B2: 背景色设置为红色;设置纵向扩展,左主格 设为 A2;值表达式:=to(1,3)
C2: 背景色设置为蓝色;左主格 设置为B2
D2: 背景色设置为绿色;左主格 设置为A2(即B2、D2属于同级)
备注:主格的概念在后续的主格属性中有详细介绍;横向扩展时是设置上主格,纵向扩展时是设置左主格;
(2)、扩展后:
说明:当前原始B2格进行纵向扩展时,计算原始B2格同一维度(行范围)内的所有单元格层次级别:
A2单元格的左主格为空,则默认为根格[^0];那么A2的层次级别就是1;
B2单元格的左主格是A2,则B2的层次级别就是2
C2单元格的左主格是B2,则C2的层次级别就是3
D2单元格的左主格是A2,则D2的层次级别就是2
当B2进行纵向扩展:执行同维度的单元格的复制与延展
B2单元格自身直接进行复制
A2的层次级别小于B2的级别,则高度延展
C2的层次级别大于B2的级别,则需要复制
D2的层次级别等于B2的级别,则高度延展
根据纵向扩展的规则对不同的层次级别的单元格执行不同的扩展模式;
最终计算出结果后的展示效果如上图所示范。
三、不可扩展
单元格的扩展属性设置为不可扩展,不管单元格的表达式返回单个值还是多个值,单元格都不执行复制,即称为不可扩展;
(1)计算前 (2)计算后
如本节图例可见,如果B2单元格设置为不可扩展,及时B2的表达式的值返回的结果是多个数据,也不执行扩展;最终结果是组合显示全部值;