使用EasyPOI模板导出Execl表格(含有图片)

         这是生成的文件效果

一、导入依赖
        <!--easypoi--><dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-base</artifactId><version>4.2.0</version></dependency><dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-web</artifactId><version>4.1.0</version></dependency><dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-annotation</artifactId><version>4.2.0</version></dependency>
com.alibaba.excel.exception.ExcelGenerateException: java.lang.NoSuchMethodError: org.apache.poi.ss.usermodel.Cell.getCellType()Lorg/apache/poi/ss/usermodel/CellType;

        我总是会遇到这个问题,原因在于公司的框架引入了hutoolExecl、POI和EasyPOI三种jar包,导致版本冲突,如果要使用EasyPOI,最好把其他的包都删掉,因为EasyPOI会自动引入原生的poi不需要单独引入。

二、创建模板文件

        这是我的xls模板文件,单个参数直接用 {{参数名}} 就可以识别到,如果是列表数据,就需要fe语法

{{$fe: maplist t.id 。。。。。。t.projectCategory}}  双花括号从头包括到尾部 maplist是后端传来的map一个键值对

三、Java代码

        1、 引入模板文件

TemplateExportParams params = new TemplateExportParams("ftl/supervisionProject.xls");

        2、生成模板的数据

        模板的数据都是由map集合来接受的

Map<String, Object> map = new HashMap<String, Object>();map.put("year", "2024");map.put("mouth", "01");File img=new File("D:\\HuaweiMoveData\\Users\\AK47\\Desktop\\各种图片\\640 (2).jpg");ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();List<Map<String, Object>> listMap = new ArrayList<Map<String, Object>>();for (int i = 0; i < 4; i++) {Map<String, Object> lm = new HashMap<String, Object>();lm.put("id", i + 1 + "");lm.put("regionName", i * 10000 + "");lm.put("projectName", "A001");lm.put("projectCategory", "设计");// 插入图片BufferedImage bufferImg = ImageIO.read(img);ImageIO.write(bufferImg, "jpg", byteArrayOut);ImageEntity imageEntity = new ImageEntity(byteArrayOut.toByteArray(), 200, 1000);lm.put("img", imageEntity);listMap.add(lm);}map.put("maplist", listMap);

        这一步是将图片放入到集合里,execl中的图片需要转为二进制数组存放

        ImageIO.write(bufferImg, "jpg", byteArrayOut);将文件流转换到byte数组中

        ImageEntity 是easypoi封装好的实体里可以设置图片大小

 // 插入图片BufferedImage bufferImg = ImageIO.read(img);ImageIO.write(bufferImg, "jpg", byteArrayOut);ImageEntity imageEntity = new ImageEntity(byteArrayOut.toByteArray(), 200, 1000);

        3、写入到文件中,并关闭流

 Workbook workbook = ExcelExportUtil.exportExcel(params, map);FileOutputStream fos = new FileOutputStream("D:/AAAAA/test.xls");workbook.write(fos);fos.close();

    这是demo例子全部代码 

 TemplateExportParams params = new TemplateExportParams("ftl/supervisionProject.xls");Map<String, Object> map = new HashMap<String, Object>();map.put("year", "2024");map.put("mouth", "01");File img = new File("D:\\HuaweiMoveData\\Users\\AK47\\Desktop\\各种图片\\640 (2).jpg");ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();List<Map<String, Object>> listMap = new ArrayList<Map<String, Object>>();for (int i = 0; i < 4; i++) {Map<String, Object> lm = new HashMap<String, Object>();lm.put("id", i + 1 + "");lm.put("regionName", i * 10000 + "");lm.put("projectName", "A001");lm.put("projectCategory", "设计");// 插入图片BufferedImage bufferImg = ImageIO.read(img);ImageIO.write(bufferImg, "jpg", byteArrayOut);ImageEntity imageEntity = new ImageEntity(byteArrayOut.toByteArray(), 200, 1000);lm.put("img", imageEntity);listMap.add(lm);}map.put("maplist", listMap);System.out.println(listMap);Workbook workbook = ExcelExportUtil.exportExcel(params, map);FileOutputStream fos = new FileOutputStream("D:/AAAAA/test.xls");workbook.write(fos);fos.close();

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/656312.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

零、环境搭建

之前一直玩python的&#xff0c;由于工作需要C版的opencv&#xff0c;故借此寒假闲暇时间&#xff0c;进行简单了解学习。 主要用到的IDE是Visual Studio和OpenCV 一、Visual Studio下载安装 我这里没找到之前的2017版本&#xff0c;就拿目前最新的2023社区版下载&#xff1a…

30款跨平台开发方案,总有个一个适合你!

1、Qt FluentUI CEF 可以覆盖所有需求 2、.NET Avalonia(SukiUI) CEF 可以覆盖所有需求 3、.NET DevExpress跨平台产品 CEF 可以覆盖所有需求 4、JavaFx(Swing) flatlaf WebView 可以覆盖所有需求 5、Java Qt &#xff08;qtjambi&#xff09; CEF 可以覆盖所有需…

2024谷歌SEO入门指南

SEO自然搜索&#xff0c;也被称为有机搜索、非付费搜索或算法搜索&#xff0c;基本上就是你在 Google 的搜索框中输入关键词后&#xff0c;看到的搜索结果。&#xff08;当然&#xff0c;还有付费搜索结果&#xff0c;此处暂且略过&#xff09;这些结果并非由于广告投放或付费推…

C++对象模型和this指针,const修饰成员函数详解

目录 1.成员变量和成员函数分开存储 2.this指针 1.this指针概念 ​编辑 2.this指针用途 3.空指针访问成员函数 ​编辑 4.const修饰成员函数 mutable声明 1.成员变量和成员函数分开存储 空对象占用内存空间为1字节&#xff0c;这样是为了区分不同的空对象占内存的位置 …

【学习笔记】Vue3源码解析:第一部分-实现vue3环境搭建

课程地址&#xff1a;【已完结】全网最详细Vue3源码解析&#xff01;&#xff08;一行行带你手写Vue3源码&#xff09; 第一部分&#xff1a;实现vue3环境搭建&#xff08;对应课程的第1-3节&#xff09; VUE2与VUE3的对比&#xff1a; 也即vue2的痛点&#xff1a; 对TypeSc…

【Spring连载】使用Spring访问 Apache Kafka(二十)----测试应用

【Spring连载】使用Spring访问 Apache Kafka&#xff08;二十&#xff09;----测试应用Testing Applications 一、KafkaTestUtils二、JUnit三、配置主题Configuring Topics四、为多个测试类使用相同的broker&#xff0c;Using the Same Broker(s) for Multiple Test Classes五、…

微信小程序遮罩层滚动穿透的问题

常见的布局 外层一个遮罩层 里面一层是弹窗以及内容 这里还是个textarea 滚动到底的时候 底部的遮罩层也跟着滚动了 发生滚动穿透 处理方法是添加 <page-meta page-style"{{ showPolish ? overflow: hidden; : }}" /> page-meta必须在第一个节点

【bug】在子组件中watch监听父组件传过来的值,监听不到,已解决

bug复现&#xff1a; 父组件需要传参数autoinputFs&#xff0c;autoinputFs为true的时候&#xff0c;子组件中的输入框&#xff08;只有一个&#xff09;自动聚焦&#xff0c;很多组件复用mp3Search&#xff0c;有些页面不需要&#xff0c;所以定义了autoinputFs控制输入框是否…

开发一个Android App,在项目中完成添加联系人的功能,通过ContentResolver向系统中添加联系人信息。

实现步骤&#xff1a; &#xff08;1&#xff09;添加动态联系人的权限。 &#xff08;2&#xff09;创建Activity和布局文件&#xff0c;添加输入框和按钮等控件。 &#xff08;3&#xff09;完成添加联系人的功能。 代码文件如下&#xff1a; activity_main.xml文件 <!…

Java - 遍历实体类字段值

当从数据库查询出一列数据&#xff0c;需要比对各列字段的最大值或者取不为空的值时&#xff0c;需要遍历字段操作。 示例数据 项目1月成交数量2月成交数量3月成交数量4月成交数量电脑15141019手机223519导管311001418 对应实体类 Data public class ProVo {// 项目private…

sv program module

为了避免races&#xff0c;在验证中引入program&#xff1b; Similarities between program and module block A program block can instantiate another program block in the way how the module is instantiated another module block.Both can have no or more inputs, …

2024.1.29 寒假训练记录(12)

昨天大半夜开了一道2000的组合数学&#xff0c;吗的忘记看场次&#xff0c;根本搜不到啥题解&#xff0c;只能对着别人代码一点点琢磨&#xff0c;终于看明白了&#xff0c;搞了套组合数取模的板子&#xff0c;还行 训练赛剩下的题目明天补 文章目录 CF 1912B Blueprint for S…

uni-app vite+ts+vue3模式 集成微信云开发

1.创建uni-app项目 此处使用的是通过vue-cli命令行方式uni-app官网 使用vue3/vite版 创建以 typescript 开发的工程&#xff08;如命令行创建失败&#xff0c;请直接访问 gitee 下载模板&#xff09; npx degit dcloudio/uni-preset-vue#vite-ts my-vue3-project(我创建失败…

【竞技宝jjb.lol】LOL:经典大龙毁一生 WE鏖战三局力克FPX

北京时间2024年1月30日&#xff0c;英雄联盟LPL2024春季赛在昨天迎来第二周首个比赛日&#xff0c;本日首场比赛由WE对阵FPX。本场比赛双方前两局战至1-1平&#xff0c;决胜局FPX一度建立不小的经济优势&#xff0c;然而太过冒险的打大龙决策最终让其功亏一篑&#xff0c;WE鏖战…

快速入门存内计算—助力人工智能加速深度学习模型的训练和推理

存内计算&#xff1a;提高计算性能和能效的新技术 传统的计算机架构是将数据存储在存储器中&#xff0c;然后将数据传输到计算单元进行处理。这种架构存在一个性能瓶颈&#xff0c;即数据传输延迟。存内计算通过将计算单元集成到存储器中&#xff0c;消除了数据传输延迟&#…

idea控制台出现乱码的解决方案

概述&#xff1a;有时候控制台的关键说明出现乱码&#xff0c;就很令人烦恼 在 IntelliJ IDEA 中出现控制台乱码通常是由于编码设置不正确或者字体显示问题导致的。以下是一些可能的解决方案&#xff1a; 1. 设置项目编码 确保你的项目编码设置正确&#xff1a; 在 Intelli…

element -table,多行或列合并

需求:后端返回的表格数据,如果某列值一样,前端表格样式需要合并他们,需要合并的列的行数未知(所以需要有数据后遍历后端数据对需要合并的属性进行计数)即动态遍历表格合并 效果 - 重点方法;table自带的:span-method="objectSpanMethod"方法 代码环境:vue2 ,…

顺序表的奥秘:高效数据存储与检索

&#x1f37f;顺序表 &#x1f9c0;1、顺序表的实现&#x1f365;1.1 创建顺序表类&#x1f365;1.2 插入操作&#x1f365;1.3 查找操作&#x1f365;1.4 删除操作&#x1f365;1.5 清空操作 &#x1f9c0;2、ArrayList的说明&#x1f9c0;3、ArrayList使用&#x1f365;3.1 A…

app广告变现|如何提升app广告点击率?

提升app内的广告点击率&#xff08;CTR&#xff09;可以增加广告收入&#xff0c;而对广告主来说&#xff0c;广告点击率下降会直接影响广告主的投资回报率&#xff0c;因此&#xff0c;如何提升广告点击率&#xff0c;对app运营来说是一项重要的工作。 AdSet官网 | 聚合SDK广…

分类预测 | Matlab实现SCN-Adaboost随机配置网络模型SCN的Adaboost数据分类预测/故障识别

分类预测 | Matlab实现SCN-Adaboost随机配置网络模型SCN的Adaboost数据分类预测/故障识别 目录 分类预测 | Matlab实现SCN-Adaboost随机配置网络模型SCN的Adaboost数据分类预测/故障识别分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现SCN-Adaboost随机配置网…