1. 概述
1.1 问题描述
在对报表进行扩展后排序(按「牛奶」销量排序)之后,若直接使用单元格插入公式 seq() 或者 &cell 这两种方法获取序号,序号的顺序是乱序的,如何让它变成正常的排序呢?如下图所示:
1.2 解决思路
方法一:设置条件属性新值。
方法二:设置公式形态。
方法三:添加加载结束事件,利用 JavaScript 代码解决。
2. 示例
2.1 数据准备
新建普通报表,新建数据库查询 ds1,SQL 查询语句为:SELECT * FROM 销量。
2.2 报表设计
1)设计如下图所示表格,设置单元格 A2 左父格为 B2 ,并且插入公式:seq() , 生成序号。
设置单元格扩展方向:C1 为横向扩展,B2、C2 为纵向扩展。
2)未设置扩展后排序时,保存报表,点击「分页预览」,可以看到序号顺序正常,效果如下图所示:
2.3 设置扩展后排序
1)选中 B2 单元格,添加扩展后排序,公式为:C2{C1 = "牛奶"},即按照「牛奶」一列的销量值进行升序排列,步骤如下图所示:
2)保存报表,点击「分页预览」,表格已按「牛奶」列升序排序,但序号一列被打乱,如下图所示:
2.4 方法一(条件属性)
选中序号所在单元格 A2,删除原本的公式,添加「条件属性>新值」,选择公式类型,值可以是 seq(),row()-1,&cell 。
row()-1:row() 返回当前行位置,- 1 指的是当前行位置 -1,数值根据具体情况而定。
&cell:cell 指的是添加扩展后排序的单元格,本例为 B2 单元格。
由于任何情况下都需要生效,不需要添加判定条件。步骤如下图所示:
2.5 方法二(公式形态)
选中序号所在单元格 A2,选择「单元格属性>形态>公式形态」,值同样可以为 seq(),row()-1,&cell 。
注1:公式形态实际是将实际值与显示值转换,所以序号所在单元格本身必须有值。
注2:当序号所在单元格原本的值为 seq() 时,公式形态的值需要设置为 seq(1),否则序号会累计。
如下图所示:
2.6 方法三(加载结束事件)
点击菜单栏「模板>模板 Web 属性」,选择「分页预览设置」,选择「为改模板单独设置」,在事件设置中添加「加载结束」事件,输入 JavaScript 代码,步骤如下图所示:
JavaScript 代码如下:
$(function(){
var len=$('.x-table tr').length;
for(var i=1;i<len;i++){
//table中的行数是从0开始算的,下面代码意思是第二行第一个单元格编号是1
$('.x-table tr:eq('+i+') td:first').text(i);
}
})
2.7 效果预览
1)PC 端
三种方法的效果都和 2.2 节中正常排序效果一致。
2)移动端
方法三不支持移动端,方法一和方法二均支持 App 端和 H5 端,效果如下图所示:
3. 模板下载
已完成模板可参见:
%FR_HOME%\webroot\WEB-INF\reportlets\doc\Advanced\Cacuate_Between_Cells\扩展后排序重新编号方法一.cpt
%FR_HOME%\webroot\WEB-INF\reportlets\doc\Advanced\Cacuate_Between_Cells\扩展后排序重新编号方法二.cpt
%FR_HOME%\webroot\WEB-INF\reportlets\doc\Advanced\Cacuate_Between_Cells\扩展后排序重新编号方法三.cpt
点击下载模板: