💖 欢迎来到我的博客! 非常高兴能在这里与您相遇。在这里,您不仅能获得有趣的技术分享,还能感受到轻松愉快的氛围。无论您是编程新手,还是资深开发者,都能在这里找到属于您的知识宝藏,学习和成长。
🔍 博客内容包括:
- Java核心技术与微服务:涵盖Java基础、JVM、并发编程、Redis、Kafka、Spring等,帮助您全面掌握企业级开发技术。
- 大数据技术:涵盖Hadoop(HDFS)、Hive、Spark、Flink、Kafka、Redis、ECharts、Zookeeper等相关技术。
- 开发工具:分享常用开发工具(IDEA、Git、Mac、Alfred、Typora等)的使用技巧,提升开发效率。
- 数据库与优化:总结MySQL及其他常用数据库技术,解决实际工作中的数据库问题。
- Python与大数据:专注于Python编程语言的深度学习,数据分析工具(如Pandas、NumPy)和大数据处理技术,帮助您掌握数据分析、数据挖掘、机器学习等技术。
- 数据结构与算法:总结数据结构与算法的核心知识,提升编程思维,帮助您应对大厂面试挑战。
🌟 我的目标:持续学习与总结,分享技术心得与解决方案,和您一起探索技术的无限可能!在这里,我希望能与您共同进步,互相激励,成为更好的自己。
📣 欢迎订阅本专栏,与我一起在这个知识的海洋中不断学习、分享和成长!💻🚀
📍版权声明:本博客所有内容均为原创,遵循CC 4.0 BY-SA协议,转载请注明出处。
目录
Excel 是一种流行的电子表格工具,用于存储和管理结构化数据。在 Java 开发中,操作 Excel 文件是一个常见需求,无论是读取还是生成 Excel 文件,Java 都提供了丰富的工具和库。本文将介绍使用 Apache POI 操作 Excel 文件的实用教程,包括基本原理和代码示例。
一、Apache POI 简介
Apache POI 是一个流行的 Java 开源库,用于操作 Microsoft Office 文件(如 Excel 和 Word)。对于 Excel 文件,Apache POI 提供了对 .xls
(HSSF)和 .xlsx
(XSSF)文件的全面支持。
1. 为什么选择 Apache POI?
-
支持
.xls
和.xlsx
格式。 -
提供全面的 Excel 操作能力,包括读取、写入、样式设置、公式计算等。
-
活跃的社区支持和详细的文档。
2. Apache POI 的核心模块
-
HSSF(Horrible Spreadsheet Format):处理
.xls
文件。 -
XSSF(XML Spreadsheet Format):处理
.xlsx
文件。 -
SXSSF(Streaming XML Spreadsheet Format):处理大文件的流式操作。
二、环境准备
1. 添加 Maven 依赖
在使用 Apache POI 之前,需要在项目的 pom.xml
文件中添加依赖:
<dependencies>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>5.2.3</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.2.3</version>
</dependency>
</dependencies>
2. 导入必要的类
在代码中需要引入 Apache POI 提供的核心类:
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import java.io.*;
三、使用 Java 创建 Excel 文件
以下代码演示如何使用 Apache POI 创建一个简单的 Excel 文件:
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileOutputStream;
import java.io.IOException;
public class ExcelWriter {
public static void main(String[] args) {
// 创建工作簿
Workbook workbook = new XSSFWorkbook();
// 创建工作表
Sheet sheet = workbook.createSheet("Sheet1");
// 创建行和单元格
Row row = sheet.createRow(0); // 第一行
Cell cell = row.createCell(0); // 第一行第一列
cell.setCellValue("Hello, Excel!");
// 写入文件
try (FileOutputStream fileOut = new FileOutputStream("example.xlsx")) {
workbook.write(fileOut);
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("Excel 文件创建成功!");
}
}
代码解析
-
Workbook:表示整个 Excel 文件。
-
Sheet:表示工作表。
-
Row 和 Cell:表示行和单元格。
-
FileOutputStream:将工作簿写入到文件。
四、读取 Excel 文件
以下代码演示如何读取 Excel 文件中的内容:
import org.apache.poi.ss.usermodel.*;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
public class ExcelReader {
public static void main(String[] args) {
try (FileInputStream file = new FileInputStream(new File("example.xlsx"))) {
// 加载工作簿
Workbook workbook = WorkbookFactory.create(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;
default:
System.out.print("?\t");
}
}
System.out.println();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
代码解析
-
使用
WorkbookFactory.create()
动态加载.xls
或.xlsx
文件。 -
遍历
Sheet
的行和单元格,使用getCellType()
判断单元格类型。
五、设置单元格样式
以下代码演示如何为单元格设置样式:
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileOutputStream;
import java.io.IOException;
public class CellStyleExample {
public static void main(String[] args) {
Workbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet("StyledSheet");
Row row = sheet.createRow(0);
Cell cell = row.createCell(0);
cell.setCellValue("Styled Text");
// 创建单元格样式
CellStyle style = workbook.createCellStyle();
Font font = workbook.createFont();
font.setBold(true);
font.setColor(IndexedColors.RED.getIndex());
style.setFont(font);
cell.setCellStyle(style);
try (FileOutputStream fileOut = new FileOutputStream("styled_example.xlsx")) {
workbook.write(fileOut);
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("样式设置成功!");
}
}
样式设置功能
-
字体:
Font
类用于设置字体样式(如加粗、颜色)。 -
单元格样式:
CellStyle
用于应用字体和其他样式。
六、处理大文件的优化方案
对于大规模数据,使用 XSSFWorkbook 会占用大量内存,建议使用 SXSSFWorkbook,它支持流式写入:
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import java.io.FileOutputStream;
import java.io.IOException;
public class LargeExcelExample {
public static void main(String[] args) {
SXSSFWorkbook workbook = new SXSSFWorkbook();
Sheet sheet = workbook.createSheet("LargeSheet");
for (int i = 0; i < 100000; i++) {
Row row = sheet.createRow(i);
row.createCell(0).setCellValue("Row " + i);
}
try (FileOutputStream fileOut = new FileOutputStream("large_example.xlsx")) {
workbook.write(fileOut);
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("大文件生成成功!");
}
}