JavaWeb如何实现Excel导入,Java导入Excel用什么插件好?

JavaWeb 实现 Excel 数据导入指南

在 JavaWeb 开发中,Excel 导入是一个非常常见的需求,目前主流的实现方案主要分为两种:使用传统的 Apache POI 和使用阿里巴巴开源的 EasyExcel。

常用依赖库对比

  • Apache POI:Java 处理 Office 文档的标准库,功能极其强大,但内存消耗高,在处理大数据量(万级以上)时容易出现 OutOfMemoryError。
  • EasyExcel:基于 POI 的封装库,通过逐行读取而非一次性加载到内存,极大地降低了内存占用,且代码更加简洁,是目前企业级开发的首选。

使用 Alibaba EasyExcel (推荐)

EasyExcel 采用了注解驱动的方式,将 Excel 的列与 Java 实体类直接绑定。

CAD插入Excel表格!CAD与Excel表格互通的正确打开方式!CAD导入Excel封神技巧!CAD表格竟能实时同步Excel📊改数不用重导了!
加载中
CAD插入Excel表格!CAD与Excel表格互通的正确打开方式!CAD导入Excel封神技巧!CAD表格竟能实时同步Excel📊改数不用重导了!

引入依赖

在 pom.xml 中添加依赖:

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>3.x.x</version> 
</dependency>

创建实体类

使用 @ExcelProperty 注解定义 Excel 列名与字段的对应关系。

public class UserData {
    @ExcelProperty("用户名")
    private String username;
    @ExcelProperty("年龄")
    private Integer age;
    @ExcelProperty("邮箱")
    private String email;
    // Getter and Setter...
}

JavaWeb如何实现Excel导入,Java导入Excel用什么插件好?

编写监听器 (Listener)

EasyExcel 通过监听器异步处理数据,避免内存溢出。

public class UserDataListener extends AnalysisEventListener<UserData> {
    // 每隔 100 条数据批量插入一次数据库
    private static final int BATCH_COUNT = 100;
    private List<UserData> cachedDataList = new ArrayList<>();
    @Override
    public void invoke(UserData data, AnalysisContext context) {
        cachedDataList.add(data);
        if (cachedDataList.size() >= BATCH_COUNT) {
            saveData();
            cachedDataList.clear();
        }
    }
    @Override
    public void doAfterAllAnalysed(AnalysisContext context) {
        saveData(); // 处理最后一批数据
    }
    private void saveData() {
        // 调用 Service 层将 cachedDataList 批量插入数据库
    }
}

控制层调用

@PostMapping("/import")
public String importExcel(@RequestParam("file") MultipartFile file) throws IOException {
    EasyExcel.read(file.getInputStream(), UserData.class, new UserDataListener()).sheet().doRead();
    return "导入成功";
}

JavaWeb如何实现Excel导入,Java导入Excel用什么插件好?


使用 Apache POI (传统方式)

适用于对 Excel 文件进行复杂操作(如修改格式、合并单元格)的场景。

核心实现步骤

  • 获取工作簿:使用 WorkbookFactory.create(inputStream)。
  • 遍历 Sheet:通过 workbook.getSheetAt(0) 获取第一个工作表。
  • 遍历行与列:使用双重 for 循环遍历 Row 和 Cell。
  • 处理单元格类型:必须判断 CellType(String, Numeric, Boolean 等),否则会抛出异常。

核心代码片段

Workbook workbook = WorkbookFactory.create(file.getInputStream());
Sheet sheet = workbook.getSheetAt(0);
for (Row row : sheet) {
    if (row.getRowNum() == 0) continue; // 跳过表头
    String name = row.getCell(0).getStringCellValue();
    double age = row.getCell(1).getNumericCellValue();
    // 保存到数据库...
}
workbook.close();

核心实现流程总结

无论使用哪种工具,一个完整的导入流程应包含以下环节:

  • 文件上传:通过 MultipartFile 接收前端上传的 .xls 或 .xlsx

    JavaWeb如何实现Excel导入,Java导入Excel用什么插件好?

    文件。

  • 格式校验:检查文件后缀名,防止非法文件上传。
  • 数据解析:将 Excel 行转换为 Java 对象。
  • 数据验证:
    • 非空校验:必填项是否缺失。
    • 类型校验:数字列是否包含文字。
    • 业务校验:例如用户账号是否已存在。
  • 批量入库:严禁在循环中逐条调用 insert 语句,应使用 batchInsert 提高性能。
  • 结果反馈:告知用户导入成功了多少条,失败了多少条,以及失败的具体原因(通常导出错误日志文件)。

关键优化点

  • 内存优化:大数据量必须使用 EasyExcel 或 POI 的 SXSSF 模式。
  • 性能优化:使用数据库的 批量插入 (Batch Insert) 机制。
  • 事务管理:根据业务需求决定是“全部成功才提交”还是“部分成功部分失败”。
  • 异步处理:对于超大型文件,建议采用 异步处理(提交任务 $rightarrow$ 后台解析 $rightarrow$ 通知用户结果)。

首发原创文章,作者:王坚‌,如若转载,请注明出处:https://test.idctop.com/article/491341.html

赞 (0)
Java如何实现CDN加速?Java CDN开发教程与配置指南
上一篇 2026年7月13日 13:31
Excel怎么取消滚动锁定,Excel怎么取消冻结窗格?
下一篇 2026年7月13日 13:33

相关推荐

  • mac mini适合ios开发吗,mac mini做iOS开发配置要求

    Mac mini 是目前进行 iOS 开发性价比最高的选择,没有之一,它以入门级的价格提供了苹果生态核心的开发环境,能够完美运行 Xcode,满足从初学者到独立开发者的全流程需求,对于预算有限但追求稳定生产力的开发者而言,Mac mini 是进入 iOS 开发领域的最佳跳板,也是构建高效、低成本开发工作站的首选……

    2026年3月22日
    11900
  • AIoT系统是什么,AIoT系统零食有哪些应用

    AIoT系统的零食化趋势,本质上是人工智能物联网技术从工业级向消费级渗透的终极形态,其核心结论在于:智能硬件正在经历从“功能性工具”向“生活化伴侣”的蜕变,碎片化、高频次、低门槛的智能体验构成了这一领域的“零食”属性,这种转变不仅重塑了用户的交互习惯,更重新定义了智能硬件的产品开发逻辑与商业变现模式,企业若想在……

    2026年3月11日
    11500
  • win10网络2无法连接到服务器失败怎么办?,是什么原因?

    当Win10显示网络2无法连接到服务器时,通常是因为IP地址冲突、DNS缓存错误或网络适配器驱动异常,本文提供从重置网络到手动配置的完整解决方案,帮你快速恢复网络连接,win10网络2无法连接服务器失败原因排查IP地址冲突导致网络2失败同一网络内多台设备被分配了相同的IP地址,Windows会将该连接标记为“网……

    2026年7月24日
    600
  • 如何搭建幻兽帕鲁服务器?Windows平台详细教程

    在Windows平台搭建幻兽帕鲁服务器,核心在于正确配置SteamCMD工具、精准修改GameUserSettings.ini参数,并开放对应端口,即可实现低延迟的多人联机体验,服务器搭建前的硬件与网络环境评估幻兽帕鲁作为一款开放世界生存建造游戏,对服务器性能有一定要求,许多玩家在初期搭建时容易忽视硬件瓶颈,导……

    2026年6月29日
    2400
  • 软件开发师的证书怎么考?国家认可的软件工程师证书有哪些

    在当今数字化转型的浪潮中,持有专业资质认证已成为衡量技术人才能力的重要标尺,对于从事编程与技术构建的人员而言,获取高含金量的软件开发师的证书,不仅是个人技术实力的权威背书,更是突破职业发展瓶颈、实现薪资跃升的关键筹码,核心结论在于:证书本身并非终点,而是通过系统化的认证过程,构建完整的知识体系,从而在激烈的市场……

    2026年4月6日
    10100
  • 公司网站模版怎么选择?2026年最新建站模板推荐

    服务器测评在数字化转型的浪潮中,服务器作为企业网站、应用程序及数据中心的物理或虚拟基石,其性能稳定性、安全防护能力及性价比直接决定了业务的连续性与用户体验,对于众多寻求【公司网站模版】搭建方案的企业而言,选择一款合适的服务器不仅仅是技术决策,更是关乎品牌信誉与长期运营成本的战略考量,本文基于真实测试数据与多场景……

    2026年6月27日
    1900
  • VPS磁盘满了怎么清理释放空间,VPS磁盘清理方法有哪些?

    VPS磁盘满了,最直接有效的清理方法是定位大文件目录、清理日志文件并移除未使用的软件包,这三步能快速释放大部分空间,检查磁盘占用:用命令找出吃空间的罪魁祸首在动手清理之前,你得先知道空间到底被谁吃了,直接登录VPS,用几个基础命令扫一遍,目标就清晰了,用df命令看整体情况运行df -h,能看到每个分区的总大小……

    2026年7月30日
    400
  • 南京企业级物理机租用怎么选,哪家性价比高?

    南京企业级物理机租用怎么选,核心在于根据业务负载、网络需求和预算,优先选择提供BGP多线、支持硬件定制且具备本地化运维团队的服务商,避免盲目追求低价或高配,南京企业级物理机租用怎么选:从机房到配置的完整指南在南京选择企业级物理机租用,不能只看价格,物理机承担着核心业务运算与数据存储,一旦选错,后期迁移成本极高……

    2026年7月28日
    1200
  • ajax动态新增数据怎么实现?前端ajax异步请求后台接口

    Ajax动态新增数据的核心在于利用JavaScript异步请求将新数据提交至后端,并通过DOM操作实时更新页面局部内容,无需刷新整个网页即可实现数据的即时展示与交互体验的无缝衔接,在传统的Web开发模式中,用户每提交一次表单或执行一次操作,浏览器都需要重新加载整个页面,这种“全量刷新”不仅浪费带宽,还导致用户输……

    2026年6月3日
    3700
  • 服务器前端加cdn中转_配置CDN加CES监控告警

    ,纯Markdown格式,字数约2200字,服务器前端加CDN中转,再配合CES监控告警,是目前性价比最高的源站保护方案,核心思路是CDN做流量分发和缓存,CES盯后端健康,一旦异常自动触发告警,提前规避风险,为什么要做服务器前端加CDN中转直接把源站IP暴露在公网上,等于告诉所有人你的服务器位置,DDOS攻击……

    2026年8月17日
    400

发表回复

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