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格式上有所不同。

  1. HSSFWorkbook

HSSFWorkbook是POI中操作Excel 97-2003格式(.xls)的类。它基于“OLE2”文件格式,它使用的是旧的二进制格式,所以它的最大限制是65536行和256列。HSSFWorkbook有一些缺点,如不能处理大于2GB的文件,但它在兼容性和使用方面非常好,特别是在使用低版本的Excel时。

  1. 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的一个子项目,可以自由下载和使用。

该问题解决方法可以有多种:

  1. 检查项目中是否有多个版本的 Apache Commons IO。如果是,请删除其中一个版本。

  2. 更新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等文件格式,例如读取、写入、创建、修改、删除文件,以及查找文件等操作。



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/220335.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【面试】Java最新面试题资深开发-JVM第一弹

问题一&#xff1a;Java中的垃圾回收机制 在Java中&#xff0c;垃圾回收是如何工作的&#xff0c;可以简要描述一下垃圾回收的算法有哪些吗&#xff1f; 在Java中&#xff0c;垃圾回收是一种自动管理内存的机制&#xff0c;它负责识别不再被程序引用的对象并释放其占用的内存…

有趣的代码——有故事背景的程序设计3

这篇文章再和大家分享一些有“背景”的程序设计&#xff0c;希望能够让大家学到知识的同时&#xff0c;对编程学习更感兴趣&#xff0c;更能在这条路上坚定地走下去。 目录 1.幻方问题 2.用函数打印九九乘法表 3.鸡兔同笼问题 4.字数统计 5.简单选择排序 1.幻方问题 幻方又…

力扣101. 对称二叉树(递归法,迭代法,层次遍历法)

题目&#xff1a; 给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。 示例 1&#xff1a; 输入&#xff1a;root [1,2,2,3,4,4,3] 输出&#xff1a;true示例 2&#xff1a; 输入&#xff1a;root [1,2,2,null,3,null,3] 输出&#xff1a;false 代码及详细注释&…

⭐ Unity里 用Shader 去做实时动态绿幕抠图

1.先看一下效果 a.这是背景图片 b.抠完图之后(这里用的是扣去白色的) 2.shader代码如下 Shader "UniversalChromaKey" {Properties{_MainTex("Base (RGB)", 2D) "white" {}_Sens("Sensibilidad", Range(0,.9)) .3_Cutoff("R…

【AIGC】AI作图最全提示词prompt集合(收藏级)

目录 一、正向和负向提示词 二、作图参数 你好&#xff0c;我是giszz. AI做图真是太爽了&#xff0c;解放生产力&#xff0c;发展生产力。 但是&#xff0c;你是不是也总疑惑&#xff0c;为什么别人的图&#xff0c;表现力那么丰富呢&#xff0c;而且指哪打哪&#xff0c;要…

模拟电路学习笔记(一)之芯片篇(持续更新)

模拟电路学习笔记&#xff08;一&#xff09;之芯片篇&#xff08;持续更新&#xff09; 1.CD4047BE芯片 CD4047是一种包含高电压的多谐振荡器&#xff0c;该器件的操作可以在两种模式下完成&#xff0c;分别是单稳态和非稳态。CD4047需要一个外部电阻器和电容器来决定单稳态…

二叉树的前序中序后序遍历

二叉树的前序中序后序遍历-含递归和迭代代码 前序(中左右)中序(左中右)后序(左右中) 前序(中左右) 对于二叉树中的任意一个节点&#xff0c;先打印该节点&#xff0c;然后是它的左子树&#xff0c;最后右子树 A-B-D-E-C-F //递归 const preorderTraversal (root) > {const…

基于ROPNet项目训练modelnet40数据集进行3d点云的配置

项目地址&#xff1a; https://github.com/zhulf0804/ROPNet 在 MVP Registration Challenge (ICCV Workshop 2021)&#xff08;ICCV Workshop 2021&#xff09;中获得了第二名。项目可以在win10环境下运行。 论文地址&#xff1a; https://arxiv.org/abs/2107.02583 网络简介…

flask web学习之flask与http(一)

文章目录 一、请求响应循环二、HTTP请求1. 请求报文2. request对象3. 在flask中处理请求3.1 路由匹配3.2 设置监听的http方法3.3 URL处理 三、请求钩子 一、请求响应循环 每一个web应用都包含这种处理方式&#xff0c;请求-响应循环&#xff1a;客户端发出请求&#xff0c;服务…

实战经验分享,Python 连接 Oracle 踩坑实录

最近的一个测试任务需要测试 oracle 同步 hive 数据库的性能&#xff0c;那就需要对 oracle 数据库灌注测试数据。我就又打开了我的IDE&#xff0c;准备把我之前一下可以灌50w数据到 MySQL 的代码&#xff0c;改一改&#xff0c;直接用。 因为我在网上看到&#xff0c;语法上也…

基于Springboot的社区医院管理服务系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的社区医院管理服务系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系…

高低温交变湿热实验箱

产品概述 武汉凯迪正大高低温实验箱&#xff08;恒温恒湿试验箱&#xff09;乃针对各种材质表面处理&#xff0c;包含涂料、电镀、有机及无机皮膜&#xff0c;阳极处理&#xff0c;防锈油等防腐处理后测试其耐腐蚀性&#xff0c;从而确立产品的质量。 产品特点 1、内箱尺寸…

全网最新最全面的Appium自动化:Appium常用操作之按键类操作

按键类操作 按键类操作用来模拟在手机设备上进行按键操作&#xff08;推荐使用 方式一 &#xff09; 方式一、press_keycode(self,keycode,metastateNone,flagsNone)&#xff1a;模拟按键输入&#xff0c;其中&#xff1a; keycode&#xff1a;发送到设备的键值编码可以通过An…

华为快应用中自定义Slider效果

文章目录 一、前言二、实现代码三、参考链接 一、前言 在华为快应用中官方提供了<slider>控件&#xff0c;但是这个控件的限制比较多&#xff0c;比如滑块无法自定义&#xff0c;所以这里进行下自定义&#xff0c;自己修改样式。 二、实现代码 整体效果如下: 源码如下…

【数据结构(七)】查找算法

文章目录 查找算法介绍1. 线性查找算法2. 二分查找算法2.1. 思路分析2.2. 代码实现2.3. 功能拓展 3. 插值查找算法3.1. 前言3.2. 相关概念3.3. 实例应用 4. 斐波那契(黄金分割法)查找算法4.1. 斐波那契(黄金分割法)原理4.2. 实例应用 查找算法介绍 在 java 中&#xff0c;我们…

全面解析修复msvcr120.dll缺失问题的方法,msvcr120.dll丢失的原因

在计算机使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中最常见的就是“msvcr120.dll丢失”。这个错误通常会导致某些程序无法正常运行&#xff0c;给用户带来很大的困扰。那么&#xff0c;当我们遇到这个问题时&#xff0c;应该如何修复呢&#xff1f;本文…

Linux基础项目开发1:量产工具——UI系统(五)

前言&#xff1a; 前面我们已经把显示系统、输入系统、文字系统搭建好了&#xff0c;现在我们就要给它实现按钮操作了&#xff0c;也就是搭建UI系统&#xff0c;下面让我们一起实现UI系统的搭建吧 目录 一、按钮数据结构抽象 ui.h 二、按键编程 1.button.c 2.disp_manager…

使用rust slint开发桌面应用

安装QT5&#xff0c;过程省略 安装rust&#xff0c;过程省略 创建工程 cargo new slint_demo 在cargo.toml添加依赖 [dependencies] slint "1.1.1" [build-dependencies] slint-build "1.1.1" 创建build.rs fn main() {slint_build::compile(&quo…

使用 async/await 是必须避免的陷阱

使用 async/await 是必须避免的陷阱 如果我们使用过 nodejs&#xff0c;那么我们可能已经在 javaSoript 中使用了异步操作。异步任务是一个独立于 JavaSoript 引擎的主线程执行的操作。从本质上讲&#xff0c;这就是应用程序功能没有阻塞的 UI 的原因。 nodejs 的单线程性质&a…

华容道问题求解第一部分_思路即方案设计

一、前言 华容道是一种传统的益智游戏&#xff0c;通常由一个长方形木板和若干个方块组成。其中包括一个或多个不同颜色的方块&#xff08;也称为车块&#xff09;和其他大小相同的方块&#xff08;也称为障碍块&#xff09;。游戏的目标是将车块从木板的一个端点移动到另一个…