反馈已提交

网络繁忙

汉字数字排序

  • 文档创建者:axing
  • 编辑次数:4次
  • 最近更新:Alicehyy 于 2021-03-15
  • 1. 概述

    1.1 问题描述

    设计报表时,如果遇到「序号」是用汉字数字来表示的,那么要如何对它进行排序呢,如下:

    1611398036404294.png

    1.2 解决思路

    方案一:数据很少时,可以使用高级排序-自定义顺序。也可利用内置数据集实现,详情请参照文档:利用内置数据集实现自定义排序

    方案二:在「扩展后排序」中添加公式。因为 FineReport 中没有将汉字数字转化为阿拉伯数字的公式,所以我们可以反过来,用 numto() 公式将阿拉伯数字转化为汉字数字,再将汉字数字与对应的阿拉伯数字联系起来。

    注:方案二只适用于汉字数字从「一」开始且数字连续的场景。

    2. 示例

    2.1 准备数据

    新建内置数据集,添加两个字段「序号」、「项目」,均为字符串类型,设计表如下图所示:

    1611302054516157.png

    2.2 报表设计

    将数据列拖入单元格,输入对应的标题,表格样式设计如下:

    1611301991388655.png

    2.3 方案一:高级排序

    双击 A1 单元格,点击「高级」,设置排列顺序为「升序」,输入公式:SWITCH($$$,"一",1,"二",2,"三",3,"四",4)。如下图所示:

    1611411289227527.png

    2.4 方案二:扩展后排序

    选中 A2 单元格,点击「单元格属性>扩展」,设置「扩展后排序」为「升序」,输入公式: INARRAY($$$, MAPARRAY(RANGE(COUNT(A2[!0])), NUMTO(item)))

    公式说明如下表:

    公式
    说明
    MAPARRAY(array,fn)

    批量处理数组,通过 fn 对数组中的元素进行转换

    array(Array):要转换的数组,即 RANGE(COUNT(A2[!0]))

    fn(Function):处理数组项目的函数,即 NUMTO(item)

    RANGE(COUNT(A2[!0])) 返回数组: [1,2,3,4],COUNT(A2[!0]) 为计算 A2 单元格扩展出来的所有值的个数
    NUMTO(item)

    返回数字的中文表示。

    注:NUMTO()函数不支持小数

    MAPARRAY(RANGE(COUNT(A2[!0])), NUMTO(item))返回数组:[一,二,三,四]
    INARRAY($$$,array)返回单元格当前值在数组 array 中的位置,如果不在 array 中,则返回 0

    步骤如下图所示:

    Snag_c327eb4.png

    2.5 效果预览

    2.4.1 PC 端

    保存报表,点击「分页预览」,效果如下图所示:

    Snag_d06240a.png

    2.4.2 移动端

    App 端和 HTML5 端均支持,效果如下图所示:

    Snag_d0867cf.png

    3. 模板下载

    文档仅给出方案二模板。

    已完成模板可参见:%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\SpecialSubject\OrderReport\汉字数字排序.cpt

    点击下载模板:汉字数字排序.cpt

    附件列表


    主题: 报表专题
    • 有帮助
    • 没帮助
    • 只是浏览

    售前咨询电话

    400-811-8890转1

    在线技术支持

    在线QQ:800049425

    热线电话:400-811-8890转2

    总裁办24H投诉

    热线电话:173-1278-1526

    文 档反 馈

    鼠标选中内容,快速反馈问题

    鼠标选中存在疑惑的内容,即可快速反馈问题,我们将会跟进处理。

    不再提示

    10s后关闭