填报应用 >> 行式填报表 >>批量生成字符串类型卡号
本帖最后由 加菲喵 于 2015-9-10 16:36 编辑
批量生成字符串类型卡号
问题描述
实现思路
示例
在数据库中设计数据表
制作上传数据模板
保存填报
制作查看模板
保存预览
1. 问题描述批量生成字符串类型卡号是指,用户上传了一段位数很长的字符串类型卡号的开头和结尾(如图),然后要求系统自动生成这一段所有的卡号并且成功输出。27331用户上传卡号2. 实现思路 主要从三个方面进行思考:1.对过长的字符串进行截断,使其可以被转化成数字;2.使用公式批量生成;3.输出过程进行拼接;4.对数字0进行标注。3. 示例
3.1 设计数据表 此处使用Oracle数据库,在数据库中设计以下这样一张数据表,数据类型和属性如下:273343.2 制作上传数据模板
新建数据连接
新建一个数据连接,连接至该数据库,新建数据连接的方法详细请参照数据连接。
模板设置
新建一张模板,在在模板设计主体页面第二行C单元格添加公式:
if(lenA2)==0,"", RANGE(TOINTEGER(RIGHT(LEFT(A2,len(A2)-4),3)), TOINTEGER(RIGHT(LEFT(B2,len(B2)-4),3))))
下面对公式做出解释,从用户上传卡号可以看出,1.卡号位数较多;2,卡号位数不固定;3.卡号自带字符串后缀;
针对以上情况作出以下解决方案:1. 通过len(B5)-4)获取卡号位数;2.通过LEFT(B5,len(B5)-4)截断字符串后缀;3.通过RIGHT(LEFT(B5,len(B5)-4),3)获得起始卡号和终止卡号最后三位(注,此处只取了后三位,用户可以根据实际需要取位数);4.通过TOINTEGER(RIGHT()将获取的三位卡号转换成整数型;5.利用RANGE()公式实现卡号后三位的自增长。将C2单元格获取的结果传进D2单元格27335
填报属性设置
点击模板>报表填报属性,增加一个内置SQL27336对填报内容作出解释:id采用随机数来表示,用UUID();papername是用来存放产生的卡号尾数,因为此时所有的卡号位数都是采用字符串形式存放在D2单元格里用“,”分开,因此此处采用split公式,将字符串根据“,”分离,split(D2,”,”);basename用来存放卡号前几位left(B2,len(B2)-7),取B2的长度减7然后取左边这几位。suffix用来存放卡号的后缀right(B2,4);3.3 保存填报保存模板,采用填报预览。 27438点击导入按钮导入Excel表。27439 导入后效果 27337可以看到C单元格已经自动生成卡号的后三位,正式报表可以将CD两列隐藏提交进数据库后数据库保存的数据如下:273383.4 制作查看模板新建一张模板,添加数据集select filed||suffix as cardnumber from(SELECT BASENAME||PAPERNAME AS FILED,suffix FROM (select case when length(papername)=2 then '0'||papername when length(papername)=1 then'00'||papername else papername end aspapername, basename, suffix from CPTZ_PAPERNAME) order by to_number(FILED) )27487注:自增长函数range只能对数字类型实施运算,因此被存进数据库的数字会自动截断首位的0,因此在此处需要对自增长产生的数字位数进行判断,并且根据位数选择填补的0。本例截取的末尾数为三位。
在模板设计主体页面第二行添加一个单元格,并将数据列拖曳至对应单元格中,如下图:273403.5 保存预览
保存模板,查看效果如下:27440页面显示 273472734527344274412748827501