反馈已提交

网络繁忙

单元格内容数字,字母或者中文显示不同的颜色

  • 文档创建者:ezreal
  • 编辑次数:15次
  • 最近更新:RosieY 于 2022-09-22
  • 1. 概述

    单元格显示内容的时候,需要数字展示成不一样的颜色,如果是固定的文本可以使用 HTML 显示单元格内容,给固定的部分加上改变字体颜色的 HTML 标签。如果单元格的数据或者文本不固定的话就不好处理,本文会介绍一个自定义函数方法,给数字加上字体颜色改变的标签。

    2. 示例

    自定义一个函数,原始文本作为第一个参数,需要显示的颜色作为第二个参数,需要显示的字符标识作为第三个参数。

    2.1 准备编译环境

    编译程序前,需先创建一个Java工程环境,并且需要一个Java 编辑器,如 Eclipse 或 idea 。

    在编辑器下打开工程,选择「Properties>Java Build Path>Libraries」,导入 FineReport 工程 JAR 包,详细操作可参考:编译Java程序

    2.2 编写自定义函数

    在编译器中编写 FlagHtmlColor 自定义函数,Java 代码如下:https://code.fanruan.com/demo/example/src/branch/persist/10.0/src/main/java/com/fr/function/FlagHtmlColor.java

    package com.fr.function;

    import com.fr.script.AbstractFunction;
    import com.fr.stable.Primitive;

    public class FlagHtmlColor extends AbstractFunction {
        @Override
        public Object run(Object[] args) {
            String txt = "";
            String color = "";
            String flag = "";
            if (null == args || args.length == 0) {
                return Primitive.ERROR_NAME;
            } else if (args.length == 1) {
                txt = args[0].toString();
                color = "red";
                flag = "N";
            } else if (args.length == 2) {
                txt = args[0].toString();
                color = args[1].toString();
                flag = "N";
            } else {
                txt = args[0].toString();
                color = args[1].toString();
                flag = args[2].toString();
            }
            String result = getHtmlStr(txt, color, flag);
            return result;
        }

        public String getHtmlStr(String txt, String color, String flag) {
            String starthtml = "<font color='" + color + "'>";
            String endhtml = "</font>";
            StringBuffer sb = new StringBuffer();
            int len = txt.length();
            if ("N".equalsIgnoreCase(flag)) {//数字
                for (int i = 0; i < len; i++) {
                    char c = txt.charAt(i);
                    if (c >= '0' && c <= '9') {
                        String str = starthtml + c + endhtml;
                        sb.append(str);
                    } else {
                        sb.append(c);
                    }
                }
            } else if ("C".equalsIgnoreCase(flag)) {//字母
                for (int i = 0; i < len; i++) {
                    char c = txt.charAt(i);
                    if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) {
                        String str = starthtml + c + endhtml;
                        sb.append(str);
                    } else {
                        sb.append(c);
                    }
                }
            } else if ("Z".equalsIgnoreCase(flag)) {//中文
                for (int i = 0; i < len; i++) {
                    char c = txt.charAt(i);
                    if (c >= 0x4E00 && c <= 0x9FA5) {
                        String str = starthtml + c + endhtml;
                        sb.append(str);
                    } else {
                        sb.append(c);
                    }
                }
            } else {
                return txt;
            }
            return sb.toString();
        }
    }

    2.3 编译自定义函数

    编译 FlagHtmlColor.java 文件,并且将生成的 class 文件拷贝至%FR_HOME%\webapps\webroot\WEB-INF\classes\com\fr\function目录下。

    点击可下载:FlagHtmlColor.zip

    4444.png

    2.4 添加自定义函数

    启动设计器,点击「服务器>函数管理器」,添加一个自定义函数,命名为 FlagHtmlColor,选择 FlagHtmlColor.class 类,并编辑函数描述,方便使用时查看。如下图:

    2022-07-11_10-39-07.gif

    2.5 使用自定义函数

    1)数据准备

    新建工作簿,添加内置数据集 Embedded1:


    2)公式使用

    将数据列拖至单元格 A1,双击 A1,选择高级,值使用公式FlagHtmlColor($$$,"red","n"),如下图:


    注:公式第三个参数控制需要显示不同颜色的文本类型,"n" 代表是数字,"c" 代表字母,"z" 代表中文。

    3)单元格属性

    选中 A1 单元格,在右侧单元格属性表中设置设置单元格内容以 HTML 显示,如下图:


    2.6 保存与预览

    保存模板,点击分页预览,效果如下图,数字变为红色。

    3.jpg

    移动端效果如下图所示:

    点击可下载模板:FlagHtmlColorDemo.cpt

    附件列表


    主题: 二次开发
    • 有帮助
    • 没帮助
    • 只是浏览

    售前咨询电话

    400-811-8890转1

    在线技术支持

    在线QQ:800049425

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

    总裁办24H投诉

    热线电话:173-1278-1526

    文 档反 馈

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

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

    不再提示

    10s后关闭

    7*24h

    智 能客 服