当前位置: 首页 > news >正文

easyPoi使用

一、核心定位区别

  • EasyPoi全能型,支持 Excel、Word、PDF 导出,注解极简,适合小数据、快速开发
  • EasyExcel高性能型只专注 Excel,主打低内存、大数据量,适合海量数据导出

二、EasyPoi 优缺点

1、优点

使用最简单

纯注解开发,一行代码导出,上手成本极低,新手友好。

功能更全面

支持 Excel、Word、PDF 导出,支持图片、复杂表头、合并单元格、模板导出。

生态成熟

文档齐全,社区问题多,适合传统企业、后台管理系统快速开发。

小数据场景效率极高

几十行、几百行数据导出,代码量比 EasyExcel 少很多。

2、缺点

内存占用极高(致命缺点)

底层基于Apache POI,会把整个文件加载到内存,数据上万行极易OOM(内存溢出)

大数据量完全不行

不支持流式读写,几万行以上就会卡、崩。

性能差

大数据导出速度远不如 EasyExcel。

3、使用场景

  • 后台管理系统
  • 小数据量导出(<1 万行)
  • 需要导出 Word/PDF/ 图片
  • 追求开发速度,不追求极致性能

三、EasyExcel 优缺点

1、优点

性能天花板,低内存

底层自研解析引擎不加载全量数据到内存,采用逐行读写。百万行数据导出也不会 OOM。

速度极快

百万行数据导出速度是 EasyPoi 的 5~10 倍。

专门为大数据设计

阿里内部大规模使用,稳定性极强。

④API 清晰,扩展性强

2、缺点

只支持 Excel,不支持 Word、PDF

功能没有 EasyPoi 丰富

复杂样式、图片、合并单元格、模板语法不如 EasyPoi 灵活。

学习成本略高

比 EasyPoi 多几行代码,需要理解读写监听器。

3、适用场景

  • 大数据量导出(1 万~100 万行)
  • 电商、金融、报表系统
  • 高并发、高可用服务
  • 怕 OOM、追求稳定性

四、引入方法

五、使用介绍

高级功能应用介绍

导出方法说明
@GetMapping("/exportByTemplate") public void exportByTemplate(HttpServletResponse response) throws IOException { // 1. 准备数据 Map<String, Object> map = new HashMap<>(); map.put("title", "用户列表"); map.put("date", new Date()); map.put("users", getUserList()); // 2. 获取模板路径 TemplateExportParams params = new TemplateExportParams( "templates/export_template.xlsx"); // 3. 导出 Workbook workbook = ExcelExportUtil.exportExcel(params, map); response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); response.setHeader("Content-Disposition", "attachment;filename=template_export.xlsx"); workbook.write(response.getOutputStream()); }
模板主要参数类型:
①基础文本参数

②图片参数

easyPoi中使用对象ImageEntity

③数组集合

模板中使用特殊表达式{{$fe: list t}}这种表达式

使用参考文档:https://blog.csdn.net/m0_46300599/article/details/137911866?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-1-137911866-blog-99696008.235%5Ev43%5Epc_blog_bottom_relevance_base8&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-1-137911866-blog-99696008.235%5Ev43%5Epc_blog_bottom_relevance_base8&utm_relevant_index=1
处理单元格格式合并问题
①利用easyPoi注解
public class MergeData { @Excel(name = "部门", mergeVertical = true) // 垂直合并相同内容 private String department; @Excel(name = "姓名") private String name; @Excel(name = "月份", mergeRely = {"department"}) // 依赖于department列的合并 private String month; @Excel(name = "销售额") private BigDecimal amount; }
②重写easyPoi源码

源码中存在的bug问题(需要重写修复)

easyPoi-base-4.2.0.jar中的MergedRegionHelper.shiftRows()方法

注:若不修复会出现在一个模板中多次使用{{$fe: }} 时,校验模板for-each方法出错
http://www.jsqmd.com/news/864422/

相关文章:

  • 如何用abap2xlsx将SAP报表开发带入Excel自动化时代
  • NoFences:免费开源的Windows桌面整理终极方案,告别杂乱桌面
  • [Triton笔记4]低内存 Dropout
  • 百度网盘资源获取革命:3秒智能破解提取码的技术方案
  • C语言算法-02哈夫曼树
  • 地铁刷卡数据分析第三关
  • Raw Accel 终极指南:如何精准控制鼠标加速提升游戏体验
  • 入行AI应用开发?收藏这份“先进去再补课”的学习路线,小白也能轻松上手大模型!
  • 写给前端的 CANN-ascend-devkit:昇腾开发套件到底是啥?
  • DLSS版本管理工具:5分钟完成游戏性能终极优化
  • 服务数百万开发者,likeshop 凭什么成为开源商城下载量前列?
  • 三分钟掌握B站视频下载:轻松保存4K大会员专属内容
  • Betaflight飞控固件:2026年无人机飞行性能的终极解决方案
  • 免费在线法线贴图生成器终极指南:3分钟为你的3D模型添加逼真细节
  • 你的代码 80% 可以由 AI 写——手把手教你搭建 Coding Agent
  • 在模型广场对比不同模型的响应速度与风格选择合适接口
  • 使用 Terraform Grafana Provider 实现 Grafana 全栈 IaC 一体化管理的完整方案
  • “杀!杀!杀!”、“我最讨厌事后道歉”——骂“杀哥”之前,谁还没当过情绪崩溃的人
  • DazToBlender:3D创作工作流的无缝桥梁
  • 河南中职医护院校怎么选,正规卫校盘点,各地医学中专择校避坑大全 - 海棠依旧大
  • Java 常用数据结构与工具类速查
  • 从 CLAS 目录学会 ABAP 类文件格式的读法
  • 如何用AutoLegalityMod插件实现宝可梦数据一键合法化
  • Claude Code 命令配置指南
  • OpenClaw 换 “大脑”!DeepSeek V4 默认集成,离线私有 AI 自由
  • AlwaysOnTop:终极Windows窗口置顶解决方案完全指南
  • Grammarly Premium免费使用终极指南:智能Cookie搜索技术完全解析
  • Navicat Premium试用期重置完整指南:三步恢复14天免费试用
  • 为何越来越多工厂选择无线式大屏幕熔炼测温系统?核心原因解读
  • AI写标书靠不靠谱?实测2026热门AI标书工具后,我们有了答案