前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >使用 Apache POI 读写 Excel 文件:Java 实战与深入解析

使用 Apache POI 读写 Excel 文件:Java 实战与深入解析

原创
作者头像
bug菌
发布2024-12-31 09:09:07
发布2024-12-31 09:09:07
2770
举报

  咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及Java SE相关知识点了,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好习惯,别被干货淹没了哦~


🏆本文收录于「滚雪球学Java」专栏中,这个专栏专为有志于提升Java技能的你打造,覆盖Java编程的方方面面,助你从零基础到掌握Java开发的精髓。赶紧关注,收藏,学习吧!

代码语言:java
复制
环境说明:Windows 10 + IntelliJ IDEA 2021.3.2 + Jdk 1.8

前言

在 Java 编程中,处理 Excel 文件是很多企业级应用的常见需求。无论是数据导出、报表生成,还是对复杂数据表的读取,Java 都需要与 Excel 文件格式进行高效的交互。Apache POI 是一个非常流行且功能强大的开源库,它允许开发者在 Java 程序中轻松读写 Microsoft Office 文档,特别是 Excel 文件。

本文将深入介绍如何使用 Apache POI 框架来读写 Excel 文件,结合丰富的实例演示如何操作 Excel 数据。我们还将进一步探讨一些高级用法,以帮助开发者在实际项目中更高效地处理 Excel 数据。

一、Apache POI 简介

Apache POI 是 Apache 软件基金会开发的一个开源 Java 库,专门用于处理 Microsoft Office 格式的文件。POI 全称为 "Poor Obfuscation Implementation",起初的开发目的是破解 Microsoft 的文档格式以进行读写操作。如今,POI 已经成为 Java 世界中操作 Office 文档的事实标准。

在处理 Excel 文件时,POI 提供了对 HSSFXSSF 两种 API 的支持:

  • HSSF(Horrible Spreadsheet Format):用于处理 Excel 97-2003 版本(即 .xls 格式)。
  • XSSF(XML Spreadsheet Format):用于处理 Excel 2007 及以后版本(即 .xlsx 格式)。

二、引入 POI 依赖

要在 Java 项目中使用 Apache POI,首先需要在项目的 pom.xml 文件中引入 Maven 依赖。对于 Excel 文件的读写,我们至少需要以下几个依赖:

代码语言:xml
复制
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>5.2.3</version> <!-- 请根据实际版本更新 -->
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>5.2.3</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml-schemas</artifactId>
    <version>4.1.2</version>
</dependency>
<dependency>
    <groupId>org.apache.xmlbeans</groupId>
    <artifactId>xmlbeans</artifactId>
    <version>5.1.0</version>
</dependency>

引入这些依赖后,项目就可以使用 Apache POI 提供的类来处理 Excel 文件。

三、如何使用 POI 读取 Excel 文件

1. 读取 .xlsx 文件

读取 Excel 文件是 Java 程序中常见的需求,POI 提供了强大的 API 可以帮助我们读取各种 Excel 数据。下面我们以 .xlsx 文件为例,演示如何逐行读取 Excel 文件中的内容。

示例:读取 Excel 文件中的内容
代码语言:java
复制
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

public class ExcelReaderExample {
    public static void main(String[] args) {
        String excelFilePath = "example.xlsx";
        
        try (FileInputStream file = new FileInputStream(new File(excelFilePath));
             Workbook workbook = new XSSFWorkbook(file)) {
             
            // 获取第一个工作表
            Sheet sheet = workbook.getSheetAt(0);
            
            // 遍历行
            for (Row row : sheet) {
                // 遍历每一行中的单元格
                for (Cell cell : row) {
                    // 根据单元格类型读取值
                    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("未知类型\t");
                    }
                }
                System.out.println();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

在这个例子中,我们使用了 XSSFWorkbook 类来读取 Excel 文件。代码首先打开一个 Excel 文件,然后逐行遍历每个单元格,根据单元格类型分别读取字符串、数字或布尔值。

代码输出

假设 Excel 文件 example.xlsx 的内容如下:

名称

年龄

是否已注册

张三

28

true

李四

34

false

程序的输出将会是:

代码语言:json
复制
名称	年龄	是否已注册	
张三	28.0	true	
李四	34.0	false

2. 读取 .xls 文件

如果你需要读取 .xls 格式的文件,可以使用 HSSFWorkbook 来代替 XSSFWorkbook。基本的 API 调用方式是相同的。

代码语言:java
复制
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

try (FileInputStream file = new FileInputStream(new File("example.xls"));
     Workbook workbook = new HSSFWorkbook(file)) {
    // 读取逻辑同上
}

四、如何使用 POI 写入 Excel 文件

写入 Excel 文件是另一常见操作。无论是生成报表还是导出数据,Apache POI 都提供了简单的方式来创建和编辑 Excel 文件。

示例:写入 Excel 文件

下面是一个创建 Excel 文件并写入数据的示例:

代码语言:java
复制
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.FileOutputStream;
import java.io.IOException;

public class ExcelWriterExample {
    public static void main(String[] args) {
        Workbook workbook = new XSSFWorkbook(); // 创建 .xlsx 工作簿

        // 创建一个工作表
        Sheet sheet = workbook.createSheet("员工数据");

        // 创建第一行并写入表头
        Row headerRow = sheet.createRow(0);
        headerRow.createCell(0).setCellValue("姓名");
        headerRow.createCell(1).setCellValue("年龄");
        headerRow.createCell(2).setCellValue("部门");

        // 填充一些数据
        Row row1 = sheet.createRow(1);
        row1.createCell(0).setCellValue("张三");
        row1.createCell(1).setCellValue(28);
        row1.createCell(2).setCellValue("技术部");

        Row row2 = sheet.createRow(2);
        row2.createCell(0).setCellValue("李四");
        row2.createCell(1).setCellValue(34);
        row2.createCell(2).setCellValue("销售部");

        // 将文件写入硬盘
        try (FileOutputStream fileOut = new FileOutputStream("员工数据.xlsx")) {
            workbook.write(fileOut);
        } catch (IOException e) {
            e.printStackTrace();
        }

        // 关闭工作簿
        try {
            workbook.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
代码说明
  1. 首先创建了一个 XSSFWorkbook 对象,用于生成 .xlsx 文件。
  2. 使用 createSheet() 方法创建了一个工作表,并通过 createRow()createCell() 方法在表格中写入数据。
  3. 最后,将生成的 Excel 文件写入本地磁盘。

执行代码后,你将在项目目录下看到名为 员工数据.xlsx 的文件,打开该文件后,你将看到以下内容:

姓名

年龄

部门

张三

28

技术部

李四

34

销售部

五、POI 的高级用法

Apache POI 不仅能够处理简单的 Excel 读写操作,它还提供了更多高级功能,可以帮助我们处理更加复杂的 Excel 文件。

1. 单元格格式化

通过 POI,您可以对 Excel 文件中的单元格进行格式化。例如,设置数字格式、日期格式,或对单元格进行样式处理。

代码语言:java
复制
CellStyle cellStyle = workbook.createCellStyle();
DataFormat format = workbook.createDataFormat();

// 设置日期格式
cellStyle.setDataFormat(format.getFormat("yyyy-MM-dd"));
cell.setCellStyle(cellStyle);

2. 设置单元格样式

可以通过 POI 轻松地设置单元格的样式,如字体、颜色、对齐方式等。

代码语言:java
复制
Font headerFont = workbook.createFont();
headerFont.setBold(true);
headerFont.setFontHeightInPoints((short) 12);
headerFont.setColor(IndexedColors.RED.getIndex());

CellStyle headerCellStyle = workbook.createCellStyle();
headerCellStyle.setFont(headerFont);

headerRow.getCell(0).setCellStyle(headerCellStyle);

3. 合并单元格

POI 还支持合并单元格的操作,常用于生成更加复杂的报表格式。

代码语言:java
复制
sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 2)); // 合并第一行前三个单元格

4. 处理大数据量的 Excel 文件

在处理超大规模的 Excel 文件时,POI 可能会遇到内存不足的问题。为了应对这种情况,POI 提供了 SXSSFWorkbook 类,该类使用内存之外的磁盘来处理数据,适合处理大量数据的 Excel 文件生成。

代码语言:java
复制
SXSSFWorkbook workbook = new SXSSFWorkbook(100); // 保持 100 行在内存中,其余行写入磁盘

六、POI 在实际开发中的应用场景

  1. 数据导入:将用户上传的 Excel 文件内容导入数据库,常用于批量上传数据功能。
  2. 报表生成:在企业应用中,可以使用 POI 自动生成业务报表并导出 Excel 文件。
  3. 数据分析工具:使用 POI 将分析结果写入 Excel 文件,并对数据进行可视化展示。
  4. 多格式支持:由于 POI 支持 .xls.xlsx 文件格式,因此可以兼容多种版本的 Excel 文件。

七、总结

Apache POI 是一个非常强大的 Java 库,用于读写 Excel 文件,无论是在日常数据处理、批量导入导出,还是复杂的报表生成场景,POI 都能为开发者提供便捷的解决方案。本文介绍了如何通过 POI 实现 Excel 文件的基本读写功能,以及一些高级用法如单元格样式设置和处理大数据量 Excel 文件的方法。

希望通过本篇文章,你能够更好地理解如何在 Java 项目中使用 POI 操作 Excel 文件,并将其灵活运用到实际的开发场景中。


扩展阅读:

☀️建议/推荐你

  无论你是计算机专业的学生,还是对编程有兴趣的小伙伴,都建议直接毫无顾忌的学习此专栏「滚雪球学Java」,bug菌郑重承诺,凡是学习此专栏的同学,均能获取到所需的知识和技能,全网最快速入门Java编程,就像滚雪球一样,越滚越大,指数级提升。

  码字不易,如果这篇文章对你有所帮助,帮忙给bug菌来个一键三连(关注、点赞、收藏) ,您的支持就是我坚持写作分享知识点传播技术的最大动力。   同时也推荐大家关注我的硬核公众号:「猿圈奇妙屋」 ;以第一手学习bug菌的首发干货,不仅能学习更多技术硬货,还可白嫖最新BAT大厂面试真题、4000G Pdf技术书籍、万份简历/PPT模板、技术文章Markdown文档等海量资料,你想要的我都有!

📣关于我

  我是bug菌,CSDN | 掘金 | infoQ | 51CTO 等社区博客专家,历届博客之星Top30,掘金年度人气作者Top40,51CTO年度博主Top12,掘金等平台签约作者,华为云 | 阿里云| 腾讯云等社区优质创作者,全网粉丝合计30w+ ;硬核微信公众号「猿圈奇妙屋」,欢迎你的加入!免费白嫖最新BAT互联网公司面试题、4000G pdf电子书籍、简历模板等海量资料。


--End

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 一、Apache POI 简介
  • 二、引入 POI 依赖
  • 三、如何使用 POI 读取 Excel 文件
    • 1. 读取 .xlsx 文件
      • 示例:读取 Excel 文件中的内容
      • 代码输出
    • 2. 读取 .xls 文件
  • 四、如何使用 POI 写入 Excel 文件
    • 示例:写入 Excel 文件
      • 代码说明
  • 五、POI 的高级用法
    • 1. 单元格格式化
    • 2. 设置单元格样式
    • 3. 合并单元格
    • 4. 处理大数据量的 Excel 文件
  • 六、POI 在实际开发中的应用场景
  • 七、总结
  • ☀️建议/推荐你
  • 📣关于我
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档