反饋已提交

網絡繁忙

汉字数字排序

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

附件列表


主題: 目录错乱的简中文档合集
已經是第一篇
已經是最後一篇
  • 有幫助
  • 沒幫助
  • 只是瀏覽
  • 圖片不清晰
  • 用語看不懂
  • 功能說明看不懂
  • 操作說明太簡單
  • 內容有錯誤
中文(繁體)

文 檔回 饋

滑鼠選中內容,快速回饋問題

滑鼠選中存在疑惑的內容,即可快速回饋問題,我們將會跟進處理。

不再提示

10s後關閉