Java操作Excel之 POI介绍和入门
POI是Apache 提供的一个开源的Java API,用于操作Microsoft文档格式,如Excel、Word和PowerPoint等。POI是Java中处理Microsoft文档最受欢迎的库。
截至2023/12, 最新版本时 POI 5.2.5。
JDK版本兼容
POI版本 | JDK版本 |
---|---|
4.0及之上版本 | > 1.8 |
3.11及之后的 3.x | > 1.6 |
3.5 到 3.10 | >1.5 |
3.5 之前的版本 | 1.4+ |
使用Maven导入POI相关依赖
要使用 Apache POI 处理 Excel 文件,一般需要导入以下 Maven 依赖:
<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>5.2.5</version>
</dependency>
<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>5.2.5</version>
</dependency>
其中,
poi
是基础依赖,提供了操作 Excel 文件的核心功能;poi-ooxml
是操作 Office Open XML 格式文件(如 .xlsx、.docx 等)的扩展库。
只需要处理 Excel 文件,以上两个依赖已经足够了。如果需要处理 Word、PowerPoint 等其它类型的 Office 文件,还需要导入相应的扩展库。
基本示例
以下是一个使用POI 5创建和编辑Excel文件的示例代码:
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;import java.io.FileOutputStream;
import java.io.IOException;public class PoiExample {public static void main(String[] args) throws IOException {// 创建一个新的工作簿Workbook workbook = new XSSFWorkbook();// 创建一个新的工作表Sheet sheet = workbook.createSheet("Sheet1");// 创建一行并在其中添加单元格Row row = sheet.createRow(0);Cell cell = row.createCell(0);cell.setCellValue("Hello, World!");// 将工作表写入文件String filename = "example.xlsx";FileOutputStream outputStream = new FileOutputStream(filename);workbook.write(outputStream);outputStream.close();System.out.println("Excel文件已创建并保存到 " + filename);}
}
此代码将创建一个名为"example.xlsx"的新Excel文件,并在第一个工作表上添加一个单元格,其中包含文本"Hello, World!"。
产生的Excel 文件打开之后的画面如下所示:
请注意,在代码中我们使用了XSSFWorkbook类,这个类是用于处理.xlsx文件格式的工作簿。 如果你要处理.xls文件格式,则需要使用HSSFWorkbook类。
HSSFWorkbook和XSSFWorkbook区别
在POI中,HSSFWorkbook和XSSFWorkbook都是用来表示Excel工作簿(workbook)的类,但它们在处理Excel格式上有所不同。
- HSSFWorkbook
HSSFWorkbook是POI中操作Excel 97-2003格式(.xls)的类。它基于“OLE2”文件格式,它使用的是旧的二进制格式,所以它的最大限制是65536行和256列。HSSFWorkbook有一些缺点,如不能处理大于2GB的文件,但它在兼容性和使用方面非常好,特别是在使用低版本的Excel时。
- XSSFWorkbook
XSSFWorkbook是POI中操作Excel 2007及以上版本(.xlsx)的类。它基于XML文件格式,使用基于ZIP的文件格式。相比HSSFWorkbook,XSSFWorkbook可以处理更大的文件,支持更多的格式,并提供更好的性能。
在选择HSSFWorkbook和XSSFWorkbook时,可以根据所需的Excel格式以及文件大小和处理性能的需要进行选择。
错误解决之:java.lang.NoSuchMethodError: org.apache.commons.io.output.UnsynchronizedByteArrayOutputStream.builder()
出现这个错误的原因可能时项目依赖的 Apache Commons IO 版本与 Apache POI 版本不兼容, 可能是项目已经导入了旧的 Apache Commons IO,但是POI要求的该库的版本又比较高,
Apache Commons IO是一个Java类库,它提供了许多有用的IO(输入/输出)实用程序,使得Java IO编程更加容易。它提供了一组简单而强大的工具类,可以用于处理常见的IO任务,如读写文件、复制文件、关闭文件流、处理文件路径等。此外,它还提供了一些高级功能,如符号链接处理、文件过滤器、流处理、资源管理等。Apache Commons IO项目是Apache Software Foundation的一个子项目,可以自由下载和使用。
该问题解决方法可以有多种:
-
检查项目中是否有多个版本的 Apache Commons IO。如果是,请删除其中一个版本。
-
更新Maven 依赖项,以确保 Apache POI 和 Apache Commons IO 版本是兼容的。比如说降级POI的版本到 5.0.0.Maven导入修改为如下:
<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>5.0.0</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>5.0.0</version></dependency>
3. 如果使用的是较旧版本的 Apache POI,则升级到新版本。
poi-version.jar 基础依赖的包
在POI的基础依赖包的不同子包中存在一些同名的类, 比如Sheet , 在org.apache.poi.ss.usermodel和org.apache.poi.sl 中都存在, 这里看一下基础依赖的主要包及作用:
-
org.apache.poi.ss包是Apache POI库的核心包之一,它包含了用于处理Excel电子表格的类和接口。它提供了一些基于行和列的模型来处理Excel文件,支持Excel文件的读取、写入和修改。可以使用该包来创建、读取和编辑简单的Excel文件。
-
org.apache.poi.sl包则是Apache POI库的另一个包,它提供了一些类和接口,用于处理Microsoft Office Open XML文件格式中的幻灯片和演示文稿,如PPT和PPTX文件。它也包含了一些类和接口,用于处理其他的Office文件格式,如ODP和ODS文件。
-
org.apache.poi.hpsf 提供了处理Microsoft Office文档属性的功能。HPSF代表“文档摘要信息流”,是一个二进制格式,用于存储Office文档的元数据信息,比如作者、标题、主题、关键字、类别等等。
-
org.apache.poi.hssf负责处理HSSF格式的Excel文档。HSSF即“Horrible Spreadsheet Format”,是Excel二进制文件格式的一种。该包包含了一系列类,可以读取、创建、修改和写入HSSF格式的Excel文件,例如HSSFWorkbook、HSSFSheet、HSSFRow和HSSFCell等。通过使用org.apache.poi.hssf包,Java开发人员可以在应用程序中使用HSSF格式的Excel文件进行数据处理和导入导出操作。
-
org.apache.poi.poifs负责处理OLE 2 Compound Document格式的文件,包括Excel文件、Word文件、PowerPoint文件等。OLE 2 Compound Document是微软公司开发的一种文件格式,它可以将多个文件组合成一个文件,其中包括存储数据的流和存储元数据的属性表。
org.apache.poi.poifs包中包含了一些类和接口,可以读取、创建、修改和写入OLE 2 Compound Document格式的文件,例如POIFSFileSystem、POIFSWriter、DocumentEntry、DirectoryEntry等。开发人员可以使用这些类和接口来操作Excel、Word等文件格式,例如读取、写入、创建、修改、删除文件,以及查找文件等操作。
相关文章:

Java操作Excel之 POI介绍和入门
POI是Apache 提供的一个开源的Java API,用于操作Microsoft文档格式,如Excel、Word和PowerPoint等。POI是Java中处理Microsoft文档最受欢迎的库。 截至2023/12, 最新版本时 POI 5.2.5。 JDK版本兼容 POI版本JDK版本4.0及之上版本> 1.83.…...
麒麟v10 数据盘初始化 gpt分区
麒麟v10 数据盘初始化 gpt分区 1、查看磁盘 lsblk2 、分区 parted2.1、 设置磁盘分区形式2.2、 设置磁盘的计量单位为磁柱2.3、 分区2.4、 查看分区 3、分区格式化4、 挂载磁盘4.1、新建挂载目录4.2、挂载磁盘4.3、查看挂载结果 5、设置开机自动挂载磁盘分区5.1、 查询磁盘分区…...
php时间和centos时间不一致
PHP 时间和 CentOS 操作系统时间不一致的问题通常是由于时区设置不同造成的。解决这个问题可以通过以下几个步骤: 检查 CentOS 系统时间: 你可以通过在终端运行命令 date 来查看当前的系统时间和时区。 配置 CentOS 的时区: 如果系统时间不正…...
软件工程 复习笔记
目录 概述 软件的定义,特点和分类 软件的定义 软件的特点 软件的分类 软件危机的定义和表现形式 软件危机 表现形式 软件危机的产生原因及解决途径 产生软件危机的原因 软件工程 概念 软件工程的研究内容和基本原理 内容 软件工程的基本原理 软件过程…...

SpringBoot_02
Web后端开发_07 SpringBoot_02 SpringBoot原理 1.配置优先级 1.1配置 SpringBoot中支持三种格式的配置文件: application.propertiesapplication.ymlapplication.yaml properties、yaml、yml三种配置文件,优先级最高的是properties 配置文件优先级…...

实验报告-实验四(时序系统实验)
软件模拟电路图 说明 SW:开关,共六个Q1~Q3:输出Y0~Y3:输出 74LS194 首先,要给S1和S0高电位,将A~D的数据存入寄存器中(如果开始没有存入数据,那么就是0000在里面移位,不…...

PHP+ajax+layui实现双重列表的动态绑定
需求:商户下面有若干个门店,每个门店都需要绑定上收款账户 方案一:每个门店下面添加页面,可以选择账户去绑定。(难度:简单) 方案二:从商户进入,可以自由选择门店&#…...

菜鸟学习日记(python)——条件控制
Python 中的条件语句是通过一条或多条语句的执行结果(True 或者 False)来决定执行的代码块。 它的一般格式为:if...elif...else if condition1: #条件1CodeBlock1 #代码块1 elif condition2:CodeBlock2 else:CodeBlock3 如果con…...

RabbitMQ 笔记
Message durability 确保消息在server 出现问题或者recovery能恢复: declare it as durable in the producer and consumer code. boolean durable true; channel.queueDeclare("hello", durable, false, false, null);Queue 指定 //使用指定的queue&…...

DNS协议(DNS规范、DNS报文、DNS智能选路)
目录 DNS协议基本概念 DNS相关规范 DNS服务器的记录 DNS报文 DNS域名查询的两种方式 DNS工作过程 DNS智能选路 DNS协议基本概念 DNS的背景 我们知道主机通信需要依靠IP地址,但是每次通过输入对方的IP地址和对端通信不够方便,IP地址不好记忆 因此提…...

Python基础知识-变量、数据类型(整型、浮点型、字符类型、布尔类型)详解
1、基本的输出和计算表达式: prinit(12-3) printf(12*3) printf(12/3) prinit(12-3) printf(12*3) printf(12/3) 形如12-3称为表达式 这个表达式的运算结果称为 表达式的返回值 1 2 3 这样的数字,叫做 字面值常量 - * /称为 运算符或者操作符 在C和j…...

信息化,数字化,智能化是3种不同概念吗?与机械化,自动化矛盾吗?
先说结论: 1、信息化、数字化、智能化确实是3种不同的概念! 2、这3种概念与机械化、自动化并不矛盾,它们是制造业中不同发展阶段和不同层次的概念。 机械化:是指在生产过程中使用机械技术来辅助人工完成一些重复性、单一性、劳…...

C# WPF上位机开发(倒计时软件)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 生活当中,我们经常会遇到倒计时的场景,比如体育运动的时候、考试的时候等等。正好最近我们学习了c# wpf开发,完…...
Mysql timestamp和datetime区别
文章目录 一、存储范围和精度二、默认值和自动更新三、时区处理四、索引和性能五、存储空间和数据复制六、使用场景和注意事项七、时区转换 MySQL是一个常用的关系型数据库管理系统,其内置了多种数据类型用于存储和操作数据。其中,timestamp和datetime是…...

新手村之SQL——分组与子查询
1.GROUP BY GROUP BY 函数就是 SQL 中用来实现分组的函数,其用于结合聚合函数,能根据给定数据列的每个成员对查询结果进行分组统计,最终得到一个分组汇总表。 mysql> SELECT country, COUNT(country) AS teacher_count-> FROM teacher…...

【hacker送书第9期】算法训练营(入门篇)
第9期图书推荐 内容简介作者简介精彩书评图书目录概述参与方式 内容简介 本书以海量图解的形式,详细讲解常用的数据结构与算法,又融入大量的竞赛实例和解题技巧。通过对本书的学习,读者可掌握12种初级数据结构、15种常用STL函数、10种二叉树和…...

微服务链路追踪组件SkyWalking实战
概述 微服务调用存在的问题 串联调用链路,快速定位问题;理清服务之间的依赖关系;微服务接口性能分析;业务流程调用处理顺序; 全链路追踪:对请求源头到底层服务的调用链路中间的所有环节进行监控。 链路…...
ubuntu 更换国内镜像
备份 cd /etc/aptcp sources.list sources.list.bakup修改源为清华源 sed -i s/archive.ubuntu.com/mirrors.aliyun.com/g sources.list更新软件源 apt-get update其他源如下: mirrors.ustc.edu.cn 中科大 mirrors.163.com 163 mirrors.aliyun.com 阿里云...
树模型与深度模型对比
表格型数据为什么那么神奇,能让树模型在各种真实场景的表格数据中都战胜深度学习呢?作者认为有以下三种可能: 神经网络倾向于得到过于平滑的解冗余无信息的特征更容易影响神经网络 所以一定程度的特征交叉是不是必要的,因为one-ho…...
测试类运行失败:TestEngine with ID ‘junit-jupiter‘ failed to discover tests
背景:原本我的项目是可以运行的,然后我用另外一台电脑拉了下来,也是可以用的,但是很奇怪,用着用着就不能用了。报了以下错误: /Library/Java/JavaVirtualMachines/openjdk-11.jdk/Contents/Home/bin/java …...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
解锁数据库简洁之道:FastAPI与SQLModel实战指南
在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...

uniapp微信小程序视频实时流+pc端预览方案
方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度WebSocket图片帧定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐RTMP推流TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建
华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…...
【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具
第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...
Swagger和OpenApi的前世今生
Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章,二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑: 🔄 一、起源与初创期:Swagger的诞生(2010-2014) 核心…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...