咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及Java SE相关知识点了,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好习惯,别被干货淹没了哦~
🏆本文收录于「滚雪球学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 软件基金会开发的一个开源 Java 库,专门用于处理 Microsoft Office 格式的文件。POI 全称为 "Poor Obfuscation Implementation",起初的开发目的是破解 Microsoft 的文档格式以进行读写操作。如今,POI 已经成为 Java 世界中操作 Office 文档的事实标准。
在处理 Excel 文件时,POI 提供了对 HSSF 和 XSSF 两种 API 的支持:
.xls
格式)。.xlsx
格式)。要在 Java 项目中使用 Apache POI,首先需要在项目的 pom.xml
文件中引入 Maven 依赖。对于 Excel 文件的读写,我们至少需要以下几个依赖:
<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 文件。
.xlsx
文件读取 Excel 文件是 Java 程序中常见的需求,POI 提供了强大的 API 可以帮助我们读取各种 Excel 数据。下面我们以 .xlsx
文件为例,演示如何逐行读取 Excel 文件中的内容。
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 |
程序的输出将会是:
名称 年龄 是否已注册
张三 28.0 true
李四 34.0 false
.xls
文件如果你需要读取 .xls
格式的文件,可以使用 HSSFWorkbook
来代替 XSSFWorkbook
。基本的 API 调用方式是相同的。
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
try (FileInputStream file = new FileInputStream(new File("example.xls"));
Workbook workbook = new HSSFWorkbook(file)) {
// 读取逻辑同上
}
写入 Excel 文件是另一常见操作。无论是生成报表还是导出数据,Apache POI 都提供了简单的方式来创建和编辑 Excel 文件。
下面是一个创建 Excel 文件并写入数据的示例:
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();
}
}
}
XSSFWorkbook
对象,用于生成 .xlsx
文件。createSheet()
方法创建了一个工作表,并通过 createRow()
和 createCell()
方法在表格中写入数据。执行代码后,你将在项目目录下看到名为 员工数据.xlsx
的文件,打开该文件后,你将看到以下内容:
姓名 | 年龄 | 部门 |
---|---|---|
张三 | 28 | 技术部 |
李四 | 34 | 销售部 |
Apache POI 不仅能够处理简单的 Excel 读写操作,它还提供了更多高级功能,可以帮助我们处理更加复杂的 Excel 文件。
通过 POI,您可以对 Excel 文件中的单元格进行格式化。例如,设置数字格式、日期格式,或对单元格进行样式处理。
CellStyle cellStyle = workbook.createCellStyle();
DataFormat format = workbook.createDataFormat();
// 设置日期格式
cellStyle.setDataFormat(format.getFormat("yyyy-MM-dd"));
cell.setCellStyle(cellStyle);
可以通过 POI 轻松地设置单元格的样式,如字体、颜色、对齐方式等。
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);
POI 还支持合并单元格的操作,常用于生成更加复杂的报表格式。
sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 2)); // 合并第一行前三个单元格
在处理超大规模的 Excel 文件时,POI 可能会遇到内存不足的问题。为了应对这种情况,POI 提供了 SXSSFWorkbook
类,该类使用内存之外的磁盘来处理数据,适合处理大量数据的 Excel 文件生成。
SXSSFWorkbook workbook = new SXSSFWorkbook(100); // 保持 100 行在内存中,其余行写入磁盘
.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 删除。