【JAVA实战】如何使用 Apache POI 在 Java 中写入 Excel 文件

大家好!🌟 在这篇文章中,我们将带你深入学习如何使用 Apache POI 在 Java 中编写 Excel 文件的技巧!📊📚 如果你是 Java 开发者,或者正在探索如何处理 Excel 文件的数据,那么这篇文章绝对不容错过!🚀

在这里,我们不仅仅是介绍基础的 Excel 文件写入方法,还会通过详细的步骤和代码示例,帮助你快速上手。✨ 通过本篇文章,你将掌握如何创建 Excel 文件、如何插入数据以及如何使用 Apache POI 简单而高效地操作 Excel 文件!📑💻

如果你觉得这篇文章对你有帮助,请不要忘记点赞👍,收藏📌,并关注我们获取更多技术分享!还可以在下方评论📝,和我们分享你的学习心得和问题!💬

一.准备工作

关于 Apache POI 项目

Apache POI 项目的使命是创建和维护 Java API,以操作基于 Office Open XML 标准(OOXML)和 Microsoft 的 OLE 2 复合文档格式(OLE2)的各种文件格式。简而言之,您可以使用 Java 读取和写入 MS Excel 文件。

在 Java 中读写 Excel 时,您会遇到两个前缀:

HSSF:用于处理 2003 或更早版本的 Excel 文件(.xls)。一些带有 HSSF 前缀的类包括 HSSFWorkbook、HSSFSheet、HSSFRow 和 HSSFCell。

XSSF:用于处理 2007 或更高版本的 Excel 文件(.xlsx)。一些带有 XSSF 前缀的类包括 XSSFWorkbook、XSSFSheet、XSSFRow 和 XSSFCell。

以下是您需要了解的一些类:

Workbook:这是表示 Excel 工作簿的高级类。

Sheet:这是表示 Excel 工作表的高级类。

Row:这是表示 Excel 行的高级类。它具有与行相关的方法。

Cell:这是表示单个 Excel 单元格的高级类。它具有与单元格相关的方法,例如:getDataType()。

依赖项

如果您使用 Maven,您需要在 pom.xml 中添加以下依赖项。

<dependency>
   <groupId>org.apache.poi</groupId>
   <artifactId>poi</artifactId>
   <version>3.13</version>
</dependency>

<dependency>
   <groupId>org.apache.poi</groupId>
   <artifactId>poi-ooxml</artifactId>
   <version>3.13</version>
</dependency>

如果您没有使用 Maven,则需要将以下 JAR 文件添加到类路径中。

  • poi-3.13.jar
  • commons-codec-1.9.jar
  • poi-ooxml-3.13.jar
  • poi-ooxml-schemas-3.13.jar
  • xmlbeans-2.6.0.jar
  • stax-api-1.0.1.jar

二.使用 POI 写入 Excel 文件的步骤

1.创建一个空白工作簿:

XSSFWorkbook workbook = new XSSFWorkbook();

2.创建一个工作表并传递工作表名称:

XSSFSheet sheet = workbook.createSheet("Country");

3.创建一行:

Row row = sheet.createRow(rownum++);

4.创建单元格,设置其值并将单元格添加到上述行:

Cell cell = row.createCell(cellnum++);
if (obj instanceof String) cell.setCellValue((String) obj);
else if (obj instanceof Double) cell.setCellValue((Double) obj);
else if (obj instanceof Integer) cell.setCellValue((Integer) obj);

5.重复步骤 3 和 4,直到您有数据。

三.java实现代码

我们将编写名为"CountriesDetails.xlsx"的 Excel 文件。

请创建 WriteExcelMain.java,并添加以下代码。

java 复制代码
// 引入所需的包
package org.arpit.java2blog;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;

// 引入 Apache POI 库中的相关类
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class WriteExcelMain {

    // 主方法,程序入口
    public static void main(String[] args) throws IOException {
        writeFileUsingPOI();  // 调用写文件的方法
    }

    // 定义写入 Excel 文件的方法
    public static void writeFileUsingPOI() throws IOException {
        
        // 创建一个空的工作簿
        XSSFWorkbook workbook = new XSSFWorkbook();

        // 创建一个空的工作表,并命名为 "Country"
        XSSFSheet sheet = workbook.createSheet("Country");

        // 创建一个数据集合,包含一些示例数据
        ArrayList<Object[]> data = new ArrayList<Object[]>();
        data.add(new String[]{"Country", "Capital", "Population"}); // 添加标题行
        data.add(new Object[]{"India", "Delhi", 10000}); // 添加数据行
        data.add(new Object[]{"France", "Paris", 40000});
        data.add(new Object[]{"Germany", "Berlin", 20000});
        data.add(new Object[]{"England", "London", 30000});

        // 遍历数据集合,并将每一行数据写入 Excel 工作表
        int rownum = 0;
        for (Object[] countries : data) {
            // 创建行并设置行号
            Row row = sheet.createRow(rownum++);

            int cellnum = 0;
            // 遍历每一行的数据并创建单元格
            for (Object obj : countries) {
                Cell cell = row.createCell(cellnum++);
                
                // 根据数据类型设置单元格的值
                if (obj instanceof String)
                    cell.setCellValue((String) obj);  // 如果数据是字符串,设置为字符串
                else if (obj instanceof Double)
                    cell.setCellValue((Double) obj);  // 如果数据是 Double 类型,设置为数字
                else if (obj instanceof Integer)
                    cell.setCellValue((Integer) obj);  // 如果数据是 Integer 类型,设置为数字
            }
        }

        // 将工作簿写入文件系统
        try {
            // 创建输出流,将数据写入 "CountriesDetails.xlsx" 文件
            FileOutputStream out = new FileOutputStream(new File("CountriesDetails.xlsx"));
            workbook.write(out);  // 写入数据
            out.close();  // 关闭输出流
            System.out.println("CountriesDetails.xlsx has been created successfully");  // 输出提示信息
        } catch (Exception e) {
            e.printStackTrace();  // 异常处理
        } finally {
            // 最后关闭工作簿
            workbook.close();
        }
    }

}

当您运行上述程序时,您将得到以下输出:

CountriesDetails.xlsx has been created successfully

现在,让我们查看 CountriesDetails.xlsx 文件的内容。

在本篇文章中,我们详细介绍了如何使用 Apache POI 在 Java 中创建和写入 Excel 文件。通过几个简单的步骤和示例代码,你学会了如何创建一个空白的 Excel 工作簿、添加数据并将其保存到文件中。我们还介绍了 POI 库的基本使用,如何根据不同的 Excel 文件版本选择适当的前缀(HSSF 和 XSSF),并提供了 Maven 和非 Maven 项目的依赖项设置。

通过这些步骤,你将能够轻松地在 Java 项目中处理 Excel 文件,实现数据的导入、导出以及格式化等操作。无论你是进行数据分析还是生成报表,这些知识都能大大提升你的开发效率。👨‍💻📊


🎉 感谢大家阅读到这里! 🎉 如果这篇文章对你有所帮助,请给我们一个 点赞👍 ,并 收藏📌 !如果你想看到更多类似的技术分享,不要忘记点击 关注👀!如果你有任何问题或想法,欢迎在评论区留言📝,我们非常期待与你的互动!🚀

别忘了分享给你的朋友们,让更多人受益哦!😉

相关推荐
许苑向上1 小时前
MVCC底层原理实现
java·数据库·mvcc原理
组合缺一1 小时前
Solon Cloud Gateway 开发:熟悉 ExContext 及相关接口
java·后端·gateway·solon
一只淡水鱼662 小时前
【spring】集成JWT实现登录验证
java·spring·jwt
忘忧人生2 小时前
docker 部署 java 项目详解
java·docker·容器
null or notnull3 小时前
idea对jar包内容进行反编译
java·ide·intellij-idea·jar
言午coding4 小时前
【性能优化专题系列】利用CompletableFuture优化多接口调用场景下的性能
java·性能优化
幸好我会魔法4 小时前
人格分裂(交互问答)-小白想懂Elasticsearch
大数据·spring boot·后端·elasticsearch·搜索引擎·全文检索
危险、4 小时前
Spring Boot 无缝集成SpringAI的函数调用模块
人工智能·spring boot·函数调用·springai
SomeB1oody4 小时前
【Rust自学】15.2. Deref trait Pt.1:什么是Deref、解引用运算符*与实现Deref trait
开发语言·后端·rust
缘友一世4 小时前
JAVA设计模式:依赖倒转原则(DIP)在Spring框架中的实践体现
java·spring·依赖倒置原则