【EasyExcel】填充数据 jsonArray转换报错

2023-11-18

EasyExcel填充数据报Can not find ‘Converter’ support class JSONArray.

项目场景:

公司部分业务需要使用到填充Excel操作,为了方便日后可灵活使用,因此将其写在组件库中,所以在修复问题时不能使用定制化的方式去处理这个bug


1.Maven依赖

<!-- https://mvnrepository.com/artifact/com.alibaba/easyexcel -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>3.0.5</version>
</dependency>

2.模板
在这里插入图片描述
3.需要填充的数据结构
在这里插入图片描述

问题描述:

往模板中填写数据时出现Can not find ‘Converter’ support class JSONArray.错误,填充失败
场景复原
这里我们拉取EasyExcel源码,复现业务场景,后面也方便我们进行排错,以及修复错误

@Test
    public void ceshiFill(){
        String templateFileName = TestFileUtil.getPath() + "demo" + File.separator + "fill" + File.separator + "设计变更导出模板.xlsx";
        String fileName = TestFileUtil.getPath() + "ceshi" + System.currentTimeMillis() + ".xlsx";
        ExcelWriter excelWriter = EasyExcel.write(fileName).withTemplate(templateFileName).build();
        WriteSheet writeSheet = EasyExcel.writerSheet().build();
        //获取数据
        Map<String, Object> dataMap = dataMap();

        FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();
        for (Map.Entry<String, Object> entry : dataMap.entrySet()) {
            String key = entry.getKey();
            //官方文档指出,针对List类型数据需要使用FillWrapper对象进行包裹处理
            if(entry.getValue() instanceof List) {
                excelWriter.fill(new FillWrapper(key, (List)entry.getValue()), fillConfig, writeSheet);
            }
        }
        excelWriter.fill(dataMap,writeSheet);
        excelWriter.finish();
    }

数据

private Map<String ,Object> dataMap(){
        Map<String, Object> dataMap=new HashMap<>();
        dataMap.putAll(JSON.parseObject("{\n" +
            "\t\"data\": [\n" +
            "\t\t9\n" +
            "\t],\n" +
            "\t\"comments\": [\n" +
            "\t\t{\n" +
            "\t\t\t\"id\": 7791,\n" +
            "\t\t\t\"name\": \"通过\"\n" +
            "\t\t},\n" +
            "\t\t{\n" +
            "\t\t\t\"id\": 7791,\n" +
            "\t\t\t\"name\": \"通过\"\n" +
            "\t\t}\n" +
            "\t]\n" +
            "}"));
    }

原因分析:

这里我们debug调试,查看doConvert()的源码时发现Converter接口的convertToExcelData只实现了转换BigDecimal、Bolean、Byte[]、btye[]、Byte、Date、Double、File、Float、InputStream、Integer、Long、Short、URL几种类型,意味着参数data最多只能是个二维数据,并且二维数据的基数据类型必须为convertToExcelData能转换的类型,而我注入的参数类型很明显与其不符,

在这里插入图片描述

因此在这里我们需要自定义类型转换器


解决方案:

继承Converter接口,重写其convertToExcelData方法,
这里请 根据自身的业务去处理数据!!!
在这里插入图片描述

由于使用了自定义转换器,因此我们在填充时需要加载这个转换器,不然写了也是白写

如何加载自定义转换器可以上官方文档查看,
这里我们
在创建ExcelWriterBuilder时候为这次操作单独加载转换器
在这里插入图片描述

再次运行填充成功

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【EasyExcel】填充数据 jsonArray转换报错 的相关文章

随机推荐

  • 关于 OneNote 无法正常同步 问题

    问题 无法正常同步 备注 问题开始之前请刷新一下DNS缓存 https blog csdn net ljason1993 article details 83040313 看一下 无法正常同步 意思是卡同步条 一直显示同步条问题 就这个绿条
  • 如何找Ubuntu的历史版本的iso镜像文件

    目录 1 中文网站上的查找 2 英文网站上的查找 1 中文网站上的查找 中文网站为 企业开源和Linux UbuntuUbuntu是适用于企业服务器 桌面电脑 云 IoT物联网的现代化开源Linux操作系统 Ubuntu官网 https c
  • 计算机网络安全论文选题提纲,计算机网络安全毕业论文提纲

    计算机网络安全毕业论文提纲 想要写好一篇论文 首先需要一份提纲 理清思路 才能帮助你顺利的写好论文 那么 计算机网络安全毕业论文提纲又应该怎样写呢 下面是小编为大家整理的计算机网络安全毕业论文提纲 欢迎参考 题目 主标题 数据结构课程建设
  • 【软件工程】详细设计说明书

    详细设计说明书 1引言 1 1编写目的 说明编写这份详细设计说明书的目的 指出预期的读者 该文档实在概要设计的基础上 进一步的细化系统结构 展示了软件啊结构的图标 物理设计 数据结构设计 及算法设计 详细的介绍了系统各个模块是如何实现的 包
  • 【Go语言核心手册11】context.Context

    往期精选 欢迎转发 如何看待程序员35岁职业危机 Java全套学习资料 14W字 耗时半年整理 我肝了三个月 为你写出了GO核心手册 消息队列 从选型到原理 一文带你全部掌握 肝了一个月的ETCD 从Raft原理到实践 更多 11 1 内容
  • 仓储系统货位优化毕业论文【Flexsim仿真】

    一 内容简介 由堆垛机 货架 输送系统 管理系统 控制系统等组成的传统堆垛式仓储系统因为其成熟的技术和推广方式 高效等特点广泛的应用在物流 车间 制造等行业 但是堆垛机仓库每个巷道都会拥有一台堆垛机 其作业方式受到限制 鲁棒性比较差 一个巷
  • iOS 展示 gif

    gif 图 是多张依次有连续动作的图 顺时间展示的一种动态效果图 有的是均匀时间更换下一张 有的 则不是均匀时间变化 1 那么 对于均匀 时间变化的gif图 比较适合 使用 iOS 系统自带方法 imageView 的动态展示图片的方法就好
  • 30分钟掌握STL系列(三)

    30分钟掌握STL系列 三 使用迭代器编程 下面就讲一讲几种类型迭代器的编程 输入迭代器 输入迭代器是最普通的类型 输入迭代器至少能够使用 和 等 使用 来访问数据 使用 操作来递进迭代器到下一个元素或到达past the end值 为了理
  • 借助Linux中断机制的按键开关功能实现

    AlienTek的IMX6ULL开发板自带了一个按键和一个LED灯 这两个外设分别接在两个不同的GPIO端口 各自独立 我们想把按键作为灯的开关 通过按压按键来控制灯的亮灭 即灯亮时按一下则灯灭 灯灭时按一下则灯亮 这里的 按一下 是指按键
  • Vmware下Ubuntu18.04虚拟机右上角的网络图标消失连不上网络,找回方法。

    一 重新找回图标 先执行以下三段代码 在终端 Terminal 下输入 sudo service network manager stop sudo rm var lib NetworkManager NetworkManager stat
  • pandas选取数据方法

    pandas选取数据 首先创建一个3行3列的DataFrame data pd DataFrame 1 2 3 4 5 6 7 8 9 index a b c columns d e f 数据展示如下 1 按列选取数据 按照列名选取 返回一
  • 网络编程——软件架构、osi七层、TCP/UDP协议

    文章目录 一 网络编程是什么 二 软件架构 1 c s架构 2 b s架构 三 OSI七层 1 物理层 2 链路层 3 网络层 4 传输层 5 应用层 四 TCP UDP协议 1 TCP 2 UDP协议 一 网络编程是什么 一个完整计算机系
  • 解决ECharts 因X轴数据过多导致重叠显示不全的问题

    X轴 加滚动条 通过配置合适的起始位置和结束位置可以做到数据过多不重叠 数据太少也不至于很丑 定位合适的位置后还可以通过手动拉伸滚动条的长度动态的显示不同条目数 对于动态的条目数滚动条要比倾斜数据灵活太多尤其是根据时间段动态显示数据 仅此表
  • Sql中having和where的区别

    HAVING 关键字和 WHERE 关键字都可以用来过滤数据 且 HAVING 支持 WHERE 关键字中所有的操作符和语法 但是他们实现同样的功能时where效率更高 WHERE 和 HAVING 关键字存在以下几点差异 1 一般情况下
  • P8254 [NOI Online 2022 入门组] 王国比赛(二维数组巧解)

    include
  • vue pdf 预览下载功能 vue-pdf

    开发新项目的时候遇到了合同的预览下载功能 之前没有做过 实现之后记录一下 方便以后查阅 1 下载 vue pdf 插件 npm install save vue pdf 或者 cnpm install save vue pdf 2 所需页面
  • [Cover] 通过与配置管理工具链接有效使用覆盖率

    变更覆盖率的必要性 Cover的主要功能 变更覆盖率 测量代码覆盖率 以下称为覆盖率 是为了提高正在开发的软件的质量并执行高质量的测试 如果开发人员直接测试正在开发的源代码 可以更容易地增加覆盖率 但是 如果正在开发的软件被新的开发人员接管
  • java 连接redis_Redis 的监控指标有哪些?别说你不知道!

    Java技术栈 www javastack cn 关注阅读更多优质文章 来源 https blog 51cto com yht1990 2503819 监控指标 性能指标 Performance 内存指标 Memory 基本活动指标 Bas
  • 解决git@github.com: Permission denied (publickey)

    打开文件夹C Users Administrator ssh Administrator是当前用户名 在空白处点鼠标右键选择 Git Bush Here 打开gitbush 1 首先 如果你没有ssh key的话 输入命令 ssh keyg
  • 【EasyExcel】填充数据 jsonArray转换报错

    EasyExcel填充数据报Can not find Converter support class JSONArray 项目场景 公司部分业务需要使用到填充Excel操作 为了方便日后可灵活使用 因此将其写在组件库中 所以在修复问题时不能