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 …...
nodejs使用node-cron实现定时任务功能
ChatGPT国内站点:海鲸AI 在Node.js中,node-cron是一个轻量级的任务调度库,它允许你根据类似于Cron的时间表来安排任务的执行。如果你想要每十分钟执行一次任务,你可以按照以下步骤来设置: 安装node-cron: 如…...
【1day】蓝凌OA 系统datajson.js接口远程命令执行漏洞学习
注:该文章来自作者日常学习笔记,请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与作者无关。 目录 一、漏洞概述 二、影响版本 三、资产测绘 四、漏洞复现...
ABCDE类网络的划分及保留网段
根据IP地址的分类,IP地址被分为A、B、C、D和E五类。下面是对ABCDE类网络的划分及保留网段的详细描述: A类网络:范围从1.0.0.0到127.0.0.0,网络地址的最高位必须是“0”,可用的A类网络有127个,每个网络能容…...
营销系统规则引擎
一、系统介绍 规则引擎是一个用于执行营销规则的模块,其包括营销规则配置、规则校验等功能。规则引擎可以根据预先设定的条件和逻辑,自动化地执行特点的营销策略,帮助企业更好地吸引客户,增加销售和提高客户满意度。 规则引擎功能…...
【Linux】命令行参数
文章目录 前言一、C语言main函数的参数二、环境变量总结 前言 我们在Linux命令行输入命令的时候,一般都会跟上一些参数选项,比如l命令,ls -a -l。以前我总是觉得这是理所当然的,没深究其本质究竟是什么,今天才终于知道…...
【信息安全】-个人敏感信息、个人信息、个人金融信息
文章目录 个人敏感信息个人敏感信息判定举例 个人信息个人信息判定举例 个人金融信息内容a) 账户信息指账户及账户相关信息b) 鉴别信息c) 金融交易信息d) 个人身份信息e) 财产信息f) 借贷信息g) 其他信息: 出处 个人敏感信息 个人敏感信息判定 个人敏感信息是指一旦泄露、非法…...
海外服务器和国内服务器有什么样的区别呢
海外服务器和国内服务器有什么样的区别呢,其实呢在外形方面是大同小异,除了外形还有一些其他方面还存在这一些差异。 一,地理位置的差异。 海外服务器——有可能在中国数据中心之外的任何国家地区,例如美国服务器,韩…...
电脑屏幕亮度怎么调?学会4个方法,轻松调节亮度!
“我总是感觉我电脑屏幕太暗了,有时候如果光线好一点,会看不清电脑屏幕。有什么可以把电脑调亮一点的简单方法吗?” 在我们的日常生活中,电脑已经成为我们工作、学习、娱乐不可或缺的工具。然而,长时间面对电脑屏幕可能…...
微信小程序之猜数字和猜拳小游戏
目录 效果图 app.json 一、首页(index3)的代码 wxml代码 wxss代码 二、猜数字页面(index)代码 wxml代码 wxss代码 js代码 三.游戏规则页面(logs)代码 wxml代码 wxss代码 四.猜拳页面ÿ…...
CETN01 - How to Use Cloud Classroom
文章目录 I. Introduction to Cloud ClassroomII. How to Use Cloud Classroom1. Publish Resources2. Conduct Activities3. Class Teaching Reports4. View Experience Values5. Performance in Cloud Classroom I. 云课堂介绍II. 如何使用云课堂1. 发布资源2. 进行活动3. 班…...
大展建筑人才网/关键词排名优化易下拉霸屏
上面的命令可以帮助我们将命令的返回值输入到文件之中,这也就是重定向的作用. 其中: > 和 >> 的区别. >> 表示追加,>表示覆盖操作. 因此,我们一般更多的会使用>>来进行输出. 案例: 上面的命令就是将ll -al 查看 /etc文件下面的内容,然后将这个返回值输…...
乌鲁木齐疫情最新消息/站长工具seo查询软件
上文中主要介绍了Kafka 的消费位移从Zookeeper 转移到了自己管理。本文主要介绍一下位移的提交方式。 Consumer 需要向 Kafka 汇报自己的位移数据,这个汇报过程被称为提交位移。因为 Consumer 能够同时消费多个分区的数据,所以位移的提交实际上是在分区粒…...
wordpress 自动插入/常见的网站推广方法
参考: 作者:浅然_ https://blog.csdn.net/w_linux/article/details/80086950 spring就是一个能够替你做很多事情的工厂,spring容器中的Bean就是该工厂的产品。要想使用Spring工厂生产和管理Bean,就需要在配置文件中指明需要哪些B…...
广州做网站好的公司/网络营销师资格证
CSS布局实例:上中下三行布局,上下定高,中间栏自适应浏览器高度,且内容垂直居中。本文代码在firefox 2.0 / winie 6/ win ie 7 /opera 8.5 cn/win safari测试通过。对于非ie内核浏览器,通过设定display:table、display:table-row和…...
做绿色软件的网站知乎/橙子建站官网
[url]http://yp.oss.org.cn/blog/show_resource.php?resource_id1069[/url] 一.准备安装CentOS 61.CentOS简介CentOS 是甚么? CentOS 是一个基于Red Hat 企业级 Linux 提供的可自由使用的源代码企业级的 Linux 发行版本。每个版本的 CentOS …...
用绿色做图标的网站/那个推广平台好用
目录: 1.为啥要做cmdb? 2.开发cmdb的思路和大概做法? 3.cmdb的四套方案? 一、为啥要做CMDB a.项目发开和上线场景? 流程: 产品经理调研需求 》定一个时间开发 》测试 》产品项目上线(运维) 传统做法: 运维解压文件…...