首页 > Java > java教程 > 正文

使用Java实现Excel导入导出功能的详细技术教程

蓮花仙者
发布: 2025-07-08 14:21:02
原创
988人浏览过

1.选择合适的工具库:apache poi适合小文件操作,easyexcel适合大数据量场景。2.使用apache poi需手动处理单元格类型及数据读取。3.easyexcel通过实体类简化操作,支持监听器和低内存读写。4.常见问题包括格式兼容性、空行处理、日期解析及样式设置。掌握这两个库的使用能应对大多数excel导入导出需求。

使用Java实现Excel导入导出功能的详细技术教程

在实际开发中,Java 实现 Excel 的导入导出功能非常常见,尤其是在数据报表、批量处理等场景中。本文将直接给出实现方式和关键点,帮助你快速掌握核心技巧。

使用Java实现Excel导入导出功能的详细技术教程

一、选择合适的工具库

Java 中操作 Excel 最常用的库有两个:Apache POIEasyExcel

  • Apache POI 是老牌工具,支持 .xls.xlsx 格式,功能全面但使用起来略显繁琐。
  • EasyExcel 是阿里巴巴开源的库,基于 POI 做了封装,更适合大数据量读写,性能更好,推荐用于新项目。
如果只是简单的小文件操作,POI 足够;如果涉及大批量数据,优先考虑 EasyExcel。

二、使用 Apache POI 实现基本的导入导出

导出 Excel 示例:

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class ExcelExport {
    public static void main(String[] args) throws Exception {
        Workbook workbook = new XSSFWorkbook();
        Sheet sheet = workbook.createSheet("用户列表");

        Row headerRow = sheet.createRow(0);
        String[] headers = {"ID", "姓名", "年龄"};
        for (int i = 0; i < headers.length; i++) {
            Cell cell = headerRow.createCell(i);
            cell.setCellValue(headers[i]);
        }

        // 添加数据行
        Row dataRow = sheet.createRow(1);
        dataRow.createCell(0).setCellValue(1);
        dataRow.createCell(1).setCellValue("张三");
        dataRow.createCell(2).setCellValue(25);

        try (FileOutputStream fos = new FileOutputStream("users.xlsx")) {
            workbook.write(fos);
        }
    }
}
登录后复制

导入 Excel 示例:

import org.apache.poi.ss.usermodel.*;

public class ExcelImport {
    public static void main(String[] args) throws Exception {
        Workbook workbook = WorkbookFactory.create(new File("users.xlsx"));
        Sheet sheet = workbook.getSheetAt(0);

        for (Row row : sheet) {
            for (Cell cell : row) {
                System.out.print(cell.toString() + "\t");
            }
            System.out.println();
        }
    }
}
登录后复制

注意:

立即学习Java免费学习笔记(深入)”;

阿贝智能
阿贝智能

阿贝智能是基于AI技术辅助创作儿童绘本、睡前故事和有声书的平台,助你创意实现、梦想成真。

阿贝智能17
查看详情 阿贝智能
  • 处理数字单元格时要判断类型 cell.getCellType() == CellType.NUMERIC
  • 字符串用 getStringCellValue() 获取
  • 可以结合 Map 或实体类来存储每一行数据

三、使用 EasyExcel 简化操作(推荐)

定义实体类:

@Data
public class User {
    @ExcelProperty("ID")
    private int id;

    @ExcelProperty("姓名")
    private String name;

    @ExcelProperty("年龄")
    private int age;
}
登录后复制

导出操作:

List<User> userList = new ArrayList<>();
// 添加测试数据
userList.add(new User(1, "张三", 25));
userList.add(new User(2, "李四", 30));

EasyExcel.write(new File("users_easy.xlsx"), User.class)
         .sheet("用户列表")
         .doWrite(userList);
登录后复制

导入操作:

List<User> users = new ArrayList<>();
EasyExcel.read(new File("users_easy.xlsx"), User.class, new PageReadListener<User>(users::addAll))
         .sheet()
         .doRead();
登录后复制

使用 EasyExcel 的优势在于:

使用Java实现Excel导入导出功能的详细技术教程
  • 不用手动处理各种单元格类型
  • 支持监听器异步读取
  • 内存占用低,适合百万级数据导入导出

四、一些容易踩坑的地方

  • 文件格式兼容性问题
    .xls.xlsx 是两种不同格式,Apache POI 需要用不同的类(HSSF vs XSSF)来处理。

  • 空行或空单元格处理
    有些时候 Excel 文件中间有空白行或列,遍历的时候要注意跳过。

  • 日期格式解析异常
    Excel 中的日期本质上是数字,需要通过 DateUtil.isCellDateFormatted(cell) 来判断是否为日期,并用 getDateCellValue() 正确获取。

  • 样式设置复杂
    如果需要设置字体、背景色、边框等样式,Apache POI 需要创建 CellStyle 并复用,不能每次都新建。


基本上就这些内容了。掌握了 Apache POI 和 EasyExcel 的使用,你可以应对大部分 Excel 导入导出的需求。刚开始可能会觉得 API 多不好记,但多练几次就能熟练上手。

以上就是使用Java实现Excel导入导出功能的详细技术教程的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号