💖 欢迎来到我的博客! 非常高兴能在这里与您相遇。在这里,您不仅能获得有趣的技术分享,还能感受到轻松愉快的氛围。无论您是编程新手,还是资深开发者,都能在这里找到属于您的知识宝藏,学习和成长。
🔍 博客内容包括:
- 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协议,转载请注明出处。
目录
一、Apache POI 简介
1. 为什么选择 Apache POI?
2. Apache POI 的核心模块
二、环境准备
1. 添加 Maven 依赖
2. 导入必要的类
三、使用 Java 创建 Excel 文件
代码解析
四、读取 Excel 文件
代码解析
五、设置单元格样式
样式设置功能
六、处理大文件的优化方案
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 提供的核心类:
java">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 文件:
java">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 文件中的内容:
java">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()
判断单元格类型。
五、设置单元格样式
以下代码演示如何为单元格设置样式:
java">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,它支持流式写入:
java">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("大文件生成成功!");}
}