使用 Java 操作 Excel 的实用教程

server/2025/1/25 2:26:18/

💖 欢迎来到我的博客! 非常高兴能在这里与您相遇。在这里,您不仅能获得有趣的技术分享,还能感受到轻松愉快的氛围。无论您是编程新手,还是资深开发者,都能在这里找到属于您的知识宝藏,学习和成长。

🔍 博客内容包括:

  • 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 文件创建成功!");}
}
代码解析
  1. Workbook:表示整个 Excel 文件。

  2. Sheet:表示工作表。

  3. Row 和 Cell:表示行和单元格。

  4. 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();}}
}
代码解析
  1. 使用 WorkbookFactory.create() 动态加载 .xls.xlsx 文件。

  2. 遍历 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("大文件生成成功!");}
}

文章来源:https://blog.csdn.net/weixin_45710998/article/details/145136696
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ppmy.cn/server/158703.html

相关文章

SQLite Indexed By

在SQLite中&#xff0c;"Indexed By" 是一个用于指定查询时必须使用特定索引的子句。当您在SQLite中使用"INDEXED BY"子句时&#xff0c;您是在告诉数据库在执行查询时必须使用特定的索引来检索数据。如果指定的索引不存在或不能用于查询&#xff0c;那么S…

机器学习 - 常用的损失函数(交叉熵、Hinge)

损失函数是一个非负实数函数&#xff0c;用来量化模型预测和真实标签之间的差异. 上一篇文章介绍了2种常用的损失函数&#xff0c;下面介绍另外2种常用的损失函数. 一、Hinge 损失函数 Hinge 损失函数是一种常用于分类任务&#xff08;尤其是支持向量机&#xff0c;SVM&…

springmvc的获取请求数据

在使用 SpringMVC 开发 web 应用时&#xff0c;我们经常需要从用户的请求中获取数据。不管是表单提交、查询参数&#xff0c;还是路径上的数据&#xff0c;SpringMVC 都为我们提供了简单而强大的方式来获取这些数据。 1. 使用 RequestParam 获取查询参数 基本使用&#xff1a…

基于Hiperwalk的量子行走Python编程

一、引言 1.1 研究背景与意义 在科技飞速发展的当下,量子计算已成为全球科研领域的焦点,被视为未来计算技术的革命性突破方向。随着对量子比特操控精度的提升、量子纠错码的发展以及量子算法的不断创新,量子计算正从理论研究逐步迈向实际应用阶段。从材料科学领域加速新型…

pytorch张量分块投影示例代码

张量的投影操作 背景 张量投影 是深度学习中常见的操作,将输入张量通过线性变换映射到另一个空间。例如: Y=W⋅X+b 其中: X: 输入张量(形状可能为 (B,M,K),即批量维度、序列维度、特征维度)。W: 权重矩阵((K,N),将 K 维投影到 N 维)。b: 偏置向量(可选,(N,))。Y:…

神经网络初始化 (init) 介绍

文章目录 引言1. 初始化的重要性1.1 打破对称性1.2 控制方差1.3 加速收敛与提高泛化能力 2. 常见的初始化方法及其应用场景2.1 Xavier/Glorot 初始化2.2 He 初始化2.3 正交初始化2.4 其他初始化方法 3. 如何设置初始化4. 基于 BERT 的文本分类如何进行初始化4.1 项目背景4.2 模…

分布式ID的实现方案

1. 什么是分布式ID ​ 对于低访问量的系统来说&#xff0c;无需对数据库进行分库分表&#xff0c;单库单表完全可以应对&#xff0c;但是随着系统访问量的上升&#xff0c;单表单库的访问压力逐渐增大&#xff0c;这时候就需要采用分库分表的方案&#xff0c;来缓解压力。 ​…

<C++学习> C++ Boost 字符串操作教程

C Boost 字符串操作教程 Boost 提供了一些实用的库来增强 C 的字符串操作能力&#xff0c;特别是 Boost.StringAlgo 和其他与字符串相关的工具。这些库为字符串处理提供了更高效、更简洁的方法&#xff0c;相比标准库功能更为丰富。 1. Boost.StringAlgo 简介 Boost.StringAl…