Java读取Excel并写入怎么操作?java poi读取excel并写入mysql

Java读取Excel并写入的核心方案是结合Apache POI或EasyExcel库,通过流式处理或内存映射技术实现高效的数据解析与持久化,其中EasyExcel因低内存占用更适合大数据量场景。

在数据驱动的时代,Excel依然是企业间流转信息最通用的载体,无论是财务对账、库存盘点还是用户数据迁移,Java开发者经常面临将非结构化或半结构化的表格数据转化为程序可处理对象的任务,过去,开发者往往依赖老旧的API,导致在处理万级甚至百万级数据时频繁遭遇内存溢出,选择合适的工具链并掌握正确的读写策略,能让这一过程变得既稳定又高效。

【狂神说Java】POI及EasyExcel一小时搞定通俗易懂
加载中
【狂神说Java】POI及EasyExcel一小时搞定通俗易懂

技术选型:POI与EasyExcel的深度对比

选择正确的库是项目成功的基石,业内专家指出,不同场景下对性能和资源的需求差异巨大,盲目追求“最新”或“最流行”往往适得其反。

Apache POI的传统优势与局限

Apache POI是Java操作Office文档的事实标准,支持.xls和.xlsx格式,它的优势在于功能全面,能够精确控制单元格样式、公式计算以及图表嵌入,对于需要精细排版或复杂公式计算的报表生成场景,POI依然是首选。

POI的短板也显而易见,它在解析Excel时会将整个工作簿加载到内存中,据统计,处理超过1万行数据时,JVM堆内存占用会显著上升,在服务器资源有限的生产环境中,这极易引发OutOfMemoryError错误,POI的API设计较为繁琐,编写样板代码较多,开发效率相对较低。

EasyExcel的轻量化革命

针对POI的痛点,阿里巴巴开源的EasyExcel应运而生,它基于POI底层,但采用了单元格事件解析模式,实现了“边读边写”的流式处理机制。

Java读取Excel并写入怎么操作?java poi读取excel并写入mysql

  • 内存占用极低:无论Excel文件多大,内存占用始终保持在MB级别,轻松应对百万级数据导入。
  • API简洁直观:通过注解映射实体类,开发者只需关注数据模型,无需关心底层XML解析细节。
  • 生态兼容性好:完美支持Spring Boot集成,且对.xlsx格式支持优异,对老旧.xls格式支持有限。

对于大多数业务系统的数据导入导出需求,EasyExcel已成为行业共识中的主流选择。

实战指南:Java读取Excel数据

读取Excel的核心在于将表格中的每一行数据映射为Java对象,以下以EasyExcel为例,展示标准的数据读取流程。

环境依赖配置

在Maven项目中,引入核心依赖是第一步,确保版本稳定,避免使用SNAPSHOT版本进行生产部署。

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>3.3.2</version>
</dependency>

定义数据模型

使用注解定义Excel列与Java字段的对应关系。@ExcelProperty注解中的索引或名称决定了映射规则。

@Data
public class UserExcelData {
    @ExcelProperty("姓名")
    private String name;
<pre><code>@ExcelProperty("年龄")
private Integer age;
@ExcelProperty("邮箱")
private String email;

执行读取操作

调用read方法,传入文件路径、数据类以及监听器,监听器负责处理每一行数据的回调逻辑。

Java读取Excel并写入怎么操作?java poi读取excel并写入mysql

EasyExcel.read("users.xlsx", UserExcelData.class, new PageReadListener<UserExcelData>(dataList -> {
    // 每页处理逻辑,例如批量入库
    for (UserExcelData data : dataList) {
        System.out.println(data.getName());
    }
})).sheet().doRead();

这种分页读取的方式,既保证了内存安全,又提高了处理吞吐量。

高效写入:构建结构化Excel文件

写入操作通常用于生成报表或导出数据,与读取不同,写入更关注数据的组装和样式的控制。

基础写入流程

使用write方法,指定输出路径和数据类,通过withTemplate方法可以实现基于模板的填充,这种方式在财务报表生成中尤为常见,因为它能保留复杂的表头设计和公式。

大数据量写入优化

当数据量达到十万级以上时,同步写入可能导致页面超时,此时应启用异步写入或分批写入策略。

  • 分批写入:将数据分割成多个小批次,每次写入后刷新输出流,避免一次性构建庞大的内存对象树。
  • 异步线程池:利用线程池并行处理数据转换,主线程仅负责接收结果并写入文件,提升整体响应速度。

常见坑点与解决方案

在写入过程中,开发者常遇到日期格式错乱或数字精度丢失的问题,解决方案是在实体类字段上添加@DateTimeFormat注解,指定具体的日期格式,如”yyyy-MM-dd HH:mm:ss”,对于金额字段,建议使用BigDecimal类型,并配合@NumberFormat注解确保精度。

Q&A:Java读取Excel并写入常见问题解析

Java读取Excel并写入怎么操作?java poi读取excel并写入mysql

Java读取Excel并写入时如何处理特殊字符和乱码?

乱码问题通常源于编码不一致,Excel文件在Windows下默认使用GBK编码,而在Linux服务器或某些编辑器中可能保存为UTF-8,在读取时,EasyExcel默认使用UTF-8,若遇到GBK编码的.xls文件,需在read方法中显式指定charset为Charset.forName(“GBK”),对于写入,建议统一使用UTF-8编码保存文件,并在前端下载时设置正确的Content-Type头,避免浏览器解析错误。

Java读取Excel并写入过程中出现OOM(内存溢出)怎么办?

OOM是大数据量处理中的头号杀手,首先检查是否使用了POI的SXSSFWorkbook以外的模式,SXSSFWorkbook虽支持流式写入,但读取仍需全量加载,确认是否使用了EasyExcel的流式读取监听器,避免将所有数据加载到List中,检查实体类中是否存在大对象引用,如图片二进制数据,应将其移除或仅存储路径,若数据量极大,建议分片处理,每次只读取和处理固定行数,处理完即释放内存。

Java读取Excel并写入能否实现复杂样式的保留与修改?

EasyExcel主要关注数据层面的读写,对样式的精细控制能力弱于POI,若需保留原有Excel的复杂样式(如合并单元格、条件格式、图表),最佳实践是“模板填充”,即预先制作好带有样式的Excel模板,程序中仅填充数据,若需动态修改样式,可结合POI的底层API,在EasyExcel写入完成后,通过POI读取生成的文件进行样式微调,但这会牺牲部分性能,对于纯数据导出,建议放弃样式保留,直接生成标准格式文件,以提升处理速度。

首发原创文章,作者:世雄 - 原生数据库架构专家,如若转载,请注明出处:https://idctop.com/article/453455.html

(0)
cdn节点主机需要备案吗,cdn服务器备案要求
上一篇 2026年7月4日 14:13
cdn运维面试题,cdn运维面试常见问题有哪些
下一篇 2026年7月4日 14:15

相关推荐

  • excel限制条件怎么设置?excel条件格式规则详解

    Excel限制条件主要通过“数据验证”功能实现,它能通过下拉菜单、输入规则或公式逻辑,强制规范单元格内容,从而从源头杜绝数据录入错误,在数据治理的初级阶段,很多职场人往往忽视了数据入口的管控,导致后期清洗数据时痛苦不堪,Excel的限制条件并非单一功能,而是一套组合拳,核心在于利用内置的规则拦截非法输入,业内专……

    2026年7月6日
    19700
  • AI内存不足无法存储怎么办,AI内存不足怎么解决

    面对大模型部署与训练过程中的算力瓶颈,核心结论非常明确:解决显存与内存溢出问题并非单纯依赖硬件堆砌,而是需要通过算法级量化、显存管理优化、计算卸载策略以及分布式架构的四维协同机制来实现,在资源受限的环境下,通过精细化的技术手段,完全可以在不显著牺牲模型性能的前提下,突破硬件物理限制,实现大模型的高效运行, 深度……

    2026年2月22日
    15000
  • 构建智慧停车系统有哪些内容?智慧停车系统建设方案

    构建智慧停车系统的核心在于打通“感知-决策-支付-运营”的全链路数据闭环,通过物联网设备实现车位状态实时监测,利用云端算法优化调度,最终达成提升周转率与降低人工成本的目标,随着城市机动车保有量的持续攀升,传统的人工收费与粗放式管理已难以应对复杂的交通压力,智慧停车不再仅仅是安装几个摄像头或二维码,而是一套融合了……

    程序编程 2026年5月25日
    4700
  • asp.net获取站点域名时,如何准确识别和提取不同环境下的完整域名?

    在ASP.NET中,获取当前站点的域名是Web开发中的常见需求,用于生成动态URL、处理重定向或记录日志,核心方法是利用HttpContext对象的Request属性,通过HttpContext.Request.Url.Host或HttpContext.Request.Host来提取主机名,在ASP.NET W……

    2026年2月4日
    11830
  • asp.net静态方法弹出对话框,如何实现具体操作步骤及原理分析?

    在ASP.NET Web Forms开发中,有时需要从服务器端的静态方法(Static Method)中触发客户端的对话框(如alert、confirm或自定义模态框),由于静态方法没有直接的页面上下文(Page对象),传统的ClientScriptManager或直接调用Response.Write会遇到障碍……

    2026年2月5日
    11300
  • 莱卡云双十一云服务器低至11.11值得买吗?云服务器选购指南

    莱卡云双十一云服务器低至11.11元,是个人开发者、中小企业及初创团队构建高可用Web应用、搭建开发测试环境及部署轻量级服务的最佳性价比选择,在云计算市场竞争日益激烈的2026年,寻找稳定且极具性价比的基础设施已成为许多技术决策者的首要任务,莱卡云凭借其在海外节点布局上的独特优势,结合双十一期间的极限让利策略……

    2026年6月28日
    1400
  • DMIT洛杉矶CN2 GIA主机值得入手吗?美国VPS推荐

    2026年洛杉矶CN2 GIA线路VPS首选DMIT,$99/年即可拥有4Gbps端口与KVM架构,是追求低延迟与高稳定性的性价比最优解,在服务器租赁市场,尤其是针对中国大陆用户的跨境连接需求中,延迟和丢包率始终是核心痛点,DMIT作为老牌服务商,其洛杉矶节点凭借CN2 GIA线路,在2026年依然保持着极高的……

    2026年6月25日
    1600
  • AIoT深度是什么意思?AIoT深度解析与应用前景

    AIoT的本质是人工智能与物联网的深度融合,其核心价值在于实现了从“万物互联”到“万物智联”的跨越,这一进程不再局限于设备的简单连接与数据采集,而是通过边缘计算与云端协同,赋予了终端设备自主决策与智能处理的能力,企业若想在这一轮技术浪潮中占据先机,必须构建“端-边-云-用”一体化的智能生态体系,将数据转化为生产……

    2026年3月11日
    10900
  • 广电网络前端培训教程怎么学?广电前端培训课程哪家好

    2026年广电网络前端培训教程的核心在于掌握超高清视听编解码、全光网架构调度及AI智算运维体系,这是突破传统广电向融合媒体算力网络转型的唯一技术路径,广电网络前端架构的2026技术跃迁算网融合底座重构传统广电前端正从单一信号分发中心向“算力+网络”双轮驱动的智算枢纽演进,根据国家广电总局2026年最新规划,全国……

    2026年4月24日
    4700
  • 广州视频智能生产应用领域有哪些?广州视频智能生产应用领域

    2026年广州视频智能生产应用领域已深度渗透智能制造、政务传媒、商业零售与数字教育四大核心板块,成为驱动千行百业降本增效与数字化转型的关键引擎,智能制造:机器视觉重塑产线效能缺陷检测与工艺优化在汽车零部件及3C电子制造密集的黄埔区,视频智能生产正替代传统人工质检,依托深度学习算法,系统可实现微米级缺陷识别:检测……

    2026年4月27日
    5900

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注