行业资讯 2025年08月6日
0 收藏 0 点赞 105 浏览 3789 个字
摘要 :

文章目录 POI 依赖坐标 Java示例 JExcelAPI 依赖坐标 Java示例 EasyExcel 依赖坐标 Java示例 总结 本文主要讲解关于Java如何优雅的操作Excel相关内容,其中包含J……




  • POI
    • 依赖坐标
    • Java示例
  • JExcelAPI
    • 依赖坐标
    • Java示例
  • EasyExcel
    • 依赖坐标
    • Java示例
  • 总结

本文主要讲解关于Java如何优雅的操作Excel相关内容,其中包含Java操作Excel的3种方式,让我们来一起学习下吧!

在Java开发中,我们经常需要读取或写入Excel文件。市面上有很多操作Excel的工具库,今天来介绍三个我在项目中用过的库,他们分别是:POI、JExcelAPI和EasyExcel,它们让你能够优雅的完成Excel操作!

这里我们只做简单介绍,不做深入讲解,如需深入,可以看各自官方文档!这里更推荐使用easyexcel工具包哦!

POI

POI是Apache下一个功能强大的Java库,用于处理各种Microsoft Office格式的文档,特别是Excel文档。它支持.xls和.xlsx格式的文件,能够处理复杂的数据,如图表、公式等。

查看POI官方文档地址

依赖坐标

<dependency>
    <groupId>org.apache.poigroupId>
    <artifactId>poi-ooxmlartifactId>
    <version>4.1.2version>
<dependency>

Java示例

以下是一个基于Apache POI库读取Excel文件的Java代码示例:

public class ExcelReader {  
    public static void main(String[] args) {  
        String excelFilePath = \"path/to/excel/file.xlsx\";  
        FileInputStream inputStream = null;  
        Workbook workbook = null;  
        Sheet sheet = null;  
        Row row = null;  
        Cell cell = null;  
        try {  
            inputStream = new FileInputStream(new File(excelFilePath));  
            workbook = new XSSFWorkbook(inputStream);  
            sheet = workbook.getSheetAt(0); // 读取第一个工作表  
            for (row = sheet.getRow(0); row != null; row = row.getNextRow()) { // 逐行读取  
                for (cell = row.getFirstCell(); cell != null; cell = cell.getNextCell()) { // 逐列读取  
                    switch (cell.getCellType()) { // 根据单元格类型获取单元格值  
                        case STRING:  
                            System.out.print(cell.getStringCellValue() + \"\\t\");  
                            break;  
                        case NUMERIC:  
                            System.out.print(cell.getNumericCellValue() + \"\\t\");  
                            break;  
                        case BOOLEAN:  
                            System.out.print(cell.getBooleanCellValue() + \"\\t\");  
                            break;  
                        default:  
                            System.out.print(cell + \"\\t\");  
                    }  
                }  
                System.out.println(); // 换行  
            }  
        } catch (IOException e) {  
            e.printStackTrace();  
        } finally {  
            if (workbook != null) {  
                try {  
                    workbook.close(); // 关闭工作簿对象和输入流对象  
                } catch (IOException e) {  
                    e.printStackTrace();  
                }  
            }  
            if (inputStream != null) {  
                try {  
                    inputStream.close(); // 关闭输入流对象  
                } catch (IOException e) {  
                    e.printStackTrace();  
                }  
            }  
        }  
    }  
}

JExcelAPI

JExcelAPI是一个较老但仍然广泛使用的库,主要用于处理.xls格式的Excel文件。它的API简单直观,适合需要快速开发的场景。

注意:

  1. 仅支持 2003 版本的Excel 也就是 后缀名为 xls 的文件
  2. 采用流式处理模型,逐行读取和写入 ——因此 可以处理大量数据,一般不会出现OOM

点此查看JExcelAPI官网

依赖坐标

dependency>
    <groupId>net.sourceforge.jexcelapigroupId>
    <artifactId>jxlartifactId>
    <version>2.6.12version>
dependency>

Java示例

以下是一个基于JExcelAPI库读取Excel文件的Java代码示例:

public class ReadExcelDemo {
    public static void main(String[] args) {
        try {
            // 1. 打开 Excel 文件
            String filePath = ExcelConstant.EXCEL_PATH_XLS;
            Workbook workbook = Workbook.getWorkbook(new java.io.File(filePath));

            // 2. 获取第一个工作表
            Sheet sheet = workbook.getSheet(0);
            /**
             * -Xms64m -Xmx64m
             * row = 4000 col = 50
             * 正常读
             */
            // 3. 遍历每一行,并读取数据
            for (int row = 0; row < sheet.getRows(); row++) {
                for (int col = 0; col < sheet.getColumns(); col++) {
                    Cell cell = sheet.getCell(col, row);
                    String content = cell.getContents();
                    content += cell.getCellFormat().getBackgroundColour().getDescription();
                    System.out.print(content+\"\\t\");
                }
                System.out.println();
            }

            // 4. 关闭工作簿
            workbook.close();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

EasyExcel

EasyExcel是一个基于POI的库,但它针对大数据量的Excel文件进行了优化。它的API更简洁,且在处理大数据量时表现更好。

点此查看EasyExcel官网

依赖坐标

dependency>
    <groupId>com.alibabagroupId>
    <artifactId>easyexcelartifactId>
    <version>2.2.6version>
dependency>

Java示例

以下是一个基于EasyExcel库读写Excel文件的Java代码示例:

public class ExcelReaderWriter {  
    public static void main(String[] args) {  
        // 读取Excel文件  
        String readFilePath = \"path/to/excel/file.xlsx\"; // 替换为实际的文件路径  
        List<Data> dataList = EasyExcel.read(readFilePath, new NoModelDataListener()).sheet().doRead();  
  
        // 写入Excel文件  
        String writeFilePath = \"path/to/excel/file_copy.xlsx\"; // 替换为实际的文件路径  
        EasyExcel.write(writeFilePath)  
                .sheet(\"Sheet1\") // 设置工作表名称  
                .doWrite(dataList); // 写入数据  
    }  
  
    // 定义一个数据类,用于保存读取到的Excel文件中的数据  
    static class Data {  
        private String name;  
        private int age;  
  
        public Data(String name, int age) {  
            this.name = name;  
            this.age = age;  
        }  
  
        public String getName() {  
            return name;  
        }  
  
        public int getAge() {  
            return age;  
        }  
    }  
  
    // 自定义一个数据监听器,用于将读取到的Excel数据转换成自定义的Data列表  
    static class NoModelDataListener implements EasyExcel.ReadListener<Data> {  
        @Override  
        public Data adapt(String headName, int headIndex, String cellContent) {  
            return new Data(headName, Integer.parseInt(cellContent)); // 将单元格内容转换成整数并返回Data对象  
        }  
    }  
}

总结

POI是功能最全面的库,适合处理复杂的Excel文件。JExcelAPI虽然老旧,但在处理.xls文件时仍然有效。EasyExcel是一个现代化的库,API更加简单易用。大家可以根据自己的情况来选择合适的工具库。

以上就是关于Java如何优雅的操作Excel的3种方式相关的全部内容,希望对你有帮助。欢迎持续关注潘子夜个人博客,学习愉快哦!

微信扫一扫

支付宝扫一扫

版权: 转载请注明出处:https://www.zuozi.net/9818.html

管理员

相关推荐
2025-08-06

文章目录 一、Reader 接口概述 1.1 什么是 Reader 接口? 1.2 Reader 与 InputStream 的区别 1.3 …

988
2025-08-06

文章目录 一、事件溯源 (一)核心概念 (二)Kafka与Golang的优势 (三)完整代码实现 二、命令…

465
2025-08-06

文章目录 一、证明GC期间执行native函数的线程仍在运行 二、native线程操作Java对象的影响及处理方…

348
2025-08-06

文章目录 一、事务基础概念 二、MyBatis事务管理机制 (一)JDBC原生事务管理(JdbcTransaction)…

456
2025-08-06

文章目录 一、SnowFlake算法核心原理 二、SnowFlake算法工作流程详解 三、SnowFlake算法的Java代码…

517
2025-08-06

文章目录 一、本地Jar包的加载操作 二、本地Class的加载方法 三、远程Jar包的加载方式 你知道Groo…

832
发表评论
暂无评论

还没有评论呢,快来抢沙发~

助力内容变现

将您的收入提升到一个新的水平

点击联系客服

在线时间:08:00-23:00

客服QQ

122325244

客服电话

400-888-8888

客服邮箱

122325244@qq.com

扫描二维码

关注微信客服号