POI in Action

1 POI 组件依赖

按需引入对应依赖 (给出官方的指引)

组件作用Maven依赖
POIFSOLE2 Filesystempoi
HPSFOLE2 Property Setspoi
HSSFExcel XLSpoi
HSLFPowerPoint PPTpoi-scratchpad
HWPFWord DOCpoi-scratchpad
HDGFVisio VSDpoi-scratchpad
HPBFPublisher PUBpoi-scratchpad
HSMFOutlook MSGpoi-scratchpad
DDFEscher common drawingspoi
HWMFWMF drawingspoi-scratchpad
OpenXML4JOOXMLpoi-ooxml plus either poi-ooxml-schemas or ooxml-schemas and ooxml-security
XSSFExcel XLSXpoi-ooxml
XSLFPowerPoint PPTXpoi-ooxml
XWPFWord DOCXpoi-ooxml
XDGFVisio VSDXpoi-ooxml
Common SLPowerPoint PPT 和 PPTX 共用组件poi-scratchpad and poi-ooxml
Common SSExcel XLS 和 XLSX 共用组件poi-ooxml
XSSFExcel XLSXpoi-ooxml
XSLFPowerPoint PPTXpoi-ooxml
XWPFWord DOCXpoi-ooxml
XDGFVisio VSDXpoi-ooxml
Common SLPowerPoint PPT 和 PPTX 共用组件poi-scratchpad and poi-ooxml
Common SSExcel XLS 和 XLSX 共用组件poi-ooxml

2 什么是 OLE2 和 OOXML

OLE2 和 OOXML 本质上都是一种文件格式规范或标准,平时看到的 excel 中,有字体、公式、颜色、图片等等,看起来非常复杂,但是在文件结构上都遵循着固定的格式。

OLE2 文件一般包括 xls、doc、ppt 等,是二进制格式的文件。 相关内容可以参考: 复合文档Ole对象二进制储存格式 。

OOXML文件一般包括 xlsx、docx、pptx 等。该类文件以指定格式的 xml 为基础并以 zip 格式压缩,这里我利用解压工具解压本地的一个 xlsx 文件,可以看到以下文件结构,在本文例子中,我们会重点关注 sharedStrings.xml 和 sheet1.xml 的内容,因为使用 SAX API 时必须用到:

在这里插入图片描述

包名描述
org.apache.poi.ssExcel API,底层解析方式类似 DOM,效率较低,内存占用较大
org.apache.poi.hssfExcel XLS API,采用 SAX API 方式读写
org.apache.poi.xssfExcel XLSX API,采用 SAX API 方式读写

POI SAX 方式的 API 非常繁琐,使用时须熟练掌握 OLE2 或 OOXML 的规范

3 EasyExcel

3.1 关于常见类解析

  • EasyExcel 入口类,用于构建开始各种操作
  • ExcelReaderBuilder ExcelWriterBuilder 构建出一个 ReadWorkbook WriteWorkbook,可以理解成一个Excel 对象,一个 Excel 只需构建一个
  • ExcelReaderSheetBuilder ExcelWriterSheetBuilder 构建出一个 ReadSheet WriteSheet 对象,可以理解成 Excel 里面的一页,每一页都要构建一个
  • ReadListener 在每一行读取完毕后都会调用 ReadListener 来处理数据
  • WriteHandler 在每一个操作包括创建单元格、创建表格等都会调用 WriteHandler 来处理数据
  • 所有配置都是继承的,Workbook 的配置会被 Sheet 继承,所以在用 EasyExcel 设置参数的时候,在 EasyExcel...sheet() 方法之前作用域是整个 Sheet, 之后针对单个 Sheet

3.2 读

3.2.1 注解

  • ExcelProperty 指定当前字段对应 Excel 中的那一列。可以根据名字或者 index 去匹配。当然也可以不写,默认第一个字段就是 index=0,以此类推。千万注意,要么全部不写,要么全部用 index,要么全部用名字去匹配。千万别三个混着用,除非你非常了解源代码中三个混着用怎么去排序的。
  • ExcelIgnore 默认所有字段都会和 Excel 去匹配,加了这个注解会忽略该字段
  • DateTimeFormat 日期转换,用 String 去接收 Excel 日期格式的数据会调用这个注解。里面的 value参照java.text.SimpleDateFormat
  • NumberFormat 数字转换,用String去接收 Excel 数字格式的数据会调用这个注解。里面的 value 参照 java.text.DecimalFormat
  • ExcelIgnoreUnannotated 默认不加 ExcelProperty 的注解的都会参与读写,加了不会参与

3.2.2 参数

3.2.2.1 通用参数

ReadWorkbook, ReadSheet 都会有的参数,如果为空,默认使用上级。

  • converter 转换器,默认加载了很多转换器。也可以自定义。
  • readListener 监听器,在读取数据的过程中会不断的调用监听器。
  • headRowNumber 需要读的表格有几行头数据。默认有一行头,也就是认为第二行开始起为数据。
  • headclazz 二选一。读取文件头对应的列表,会根据列表匹配数据,建议使用class。
  • clazzhead 二选一。读取文件的头对应的class,也可以使用注解。如果两个都不指定,则会读取全部数据。
  • autoTrim 字符串、表头等数据自动 trim
  • password 读的时候是否需要使用密码

3.2.2.2 ReadWorkbook(理解成Excel对象)参数

  • excelType 当前excel的类型 默认会自动判断
  • inputStreamfile二选一。读取文件的流,如果接收到的是流就只用,不用流建议使用file参数。因为使用了inputStream EasyExcel会帮忙创建临时文件,最终还是file
  • fileinputStream二选一。读取文件的文件。
  • autoCloseStream 自动关闭流。
  • readCache 默认小于5M用 内存,超过5M会使用 EhCache,这里不建议使用这个参数。

3.2.2.3 ReadSheet(就是Excel的一个Sheet)参数

  • sheetNo 需要读取Sheet的编码,建议使用这个来指定读取哪个Sheet
  • sheetName 根据名字去匹配 Sheet, Excel 2003不支持根据名字去匹配

3.3 写

3.3.1 注解

  • ExcelProperty index 指定写到第几列,默认根据成员变量排序。value指定写入的名称,默认成员变量的名字,多个value可以参照快速开始中的复杂头
  • ExcelIgnore 默认所有字段都会写入 Excel,这个注解会忽略这个字段
  • DateTimeFormat 日期转换,将Date写到 Excel 会调用这个注解。里面的 value 参照java.text.SimpleDateFormat
  • NumberFormat 数字转换,用Number写 Excel 会调用这个注解。里面的 value 参照java.text.DecimalFormat
  • ExcelIgnoreUnannotated 默认不加ExcelProperty 的注解的都会参与读写,加了不会参与

3.3.2 参数

3.3.2.1 通用参数

WriteWorkbook, WriteSheet, WriteTable 都会有的参数,如果为空,默认使用上级.

  • converter 转换器,默认加载了很多转换器。也可以自定义.
  • writeHandler 写的处理器。可以实现WorkbookWriteHandler, SheetWriteHandler, RowWriteHandler, CellWriteHandler, 在写入 Excel 的不同阶段会调用
  • relativeHeadRowIndex 距离多少行后开始。也就是开头空几行
  • needHead 是否导出头
  • headclazz 二选一。写入文件的头列表,建议使用 class
  • clazzhead 二选一。写入文件的头对应的 class,也可以使用注解
  • autoTrim 字符串、表头等数据自动 trim

3.3.2.2 WriteWorkbook(理解成 Excel 对象)参数

  • excelType 当前excel的类型 默认 xlsx
  • outputStreamfile 二选一。写入文件的流
  • fileoutputStream 二选一。写入的文件
  • templateInputStream 模板的文件流
  • templateFile 模板文件
  • autoCloseStream 自动关闭流。
  • password 写的时候是否需要使用密码
  • useDefaultStyle 写的时候是否是使用默认头

3.3.2.3 WriteSheet(就是 Excel 的一个 Sheet)参数

  • sheetNo 需要写入的编码。默认0
  • sheetName 需要些的 Sheet 名称, 默认同 sheetNo

3.3.2.4 WriteTable(就把 Excel 的一个 Sheet, 一块区域看一个 table)参数

  • tableNo 需要写入的编码. 默认 0

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

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

相关文章

【gitflow】 概念基本介绍

gitflow 简介 什么是gitflow? 我们大家都很会用git,但是我们很少去关心我们要怎么用branch和版本控制。 只知道master是第一个主分支,其他分支都是次要分支, 那你知道如下的问题如何回答吗? 如何保证主分支的稳定…

【哈佛积极心理学笔记】第22讲 自尊与自我实现

第22讲 自尊与自我实现 Unconditional self-esteem is the highest level, the level that Maslow would talk about “the self-actualization”, what David Schnarch talks about as “differentiated” or at the level of being known rather than desiring to be valida…

C语言复合类型之结构(struct)篇(结构指针)

结构相关知识总结 什么是结构?结构的声明与简单使用结构的初始化结构中成员变量的访问结构的初始化器结构数组结构数组的声明结构数组的成员标识 结构的嵌套结构指针结构作为参数在函数中传递将结构成员作为参数进行传递将结构地址(指向结构的指针)作为参数进行传递…

C语言进阶--指针(C语言灵魂)

目录 1.字符指针 2.指针数组 3.数组指针 4.数组参数与指针参数 4.1.一维数组传参 4.2.二维数组传参 4.3.一级指针传参 4.4.二级指针传参 5.函数指针 6.函数指针数组 7.指向函数指针数组的指针 8.回调函数 qsort函数 9.指针和数组笔试题 10.指针笔试题 前期要点回…

Linux学习[16]bash学习深入2---别名设置alias---history指令---环境配置相关

文章目录 前言1. alias2. history3. 环境配置相关总结 前言 linux学习15里面简单提了一下alias指令,就表明它是一个别名的作用,这节就展开来写一下。 同时上一节一笔带过的history指令,这一节也进行例子的演示记录。 最后是环境相关的配置&a…

常用API(String,ArrayList)

1:String类概述 String是字符串类型,可以定义字符串变量指向字符串对象String是不可变字符串的原因?1.String变量每次的修改都是产生并指向新的字符串对象。2.原来的字符串对象都是没有改变的,所以称不可变字符串。 2:String创建…

八股文总结

文章目录 项目介绍1.不动产项目项目难点机器学习算法调研图像提取算法调研数据集-ImageNetXceptionVGGInceptionDensenetMobilenet 系统流程图 2.图书项目技术栈ShiroMybatisMyBatis:Mybatis Plus: 面试问题 Java基础基本数据类型反射接口和抽象类异常代理模式1. 静态代理2. 动…

『DevOps最佳实践』使用Jenkins和Harbor进行持续集成和交付的解决方案

📣读完这篇文章里你能收获到 全文采用图文形式讲解学会使用Harbor配置项目学会在Jenkins中配置Harbor推送权限使用Jenkins和Harbor进行持续集成的实践感谢点赞收藏,避免下次找不到~ 文章目录 一、准备工作1. 环境准备2. 修改Docker配置文件3. Docker登陆…

【SpringCloud】三、Nacos服务注册+配置管理+集群搭建

文章目录 一、认识Nacos1、安装2、服务注册和发现3、服务分级存储模型4、负载均衡策略--NacosRule5、服务实例的权重设置5、环境隔离namespace6、Eureka和Nacos的区别 二、Nacos配置管理1、统一配置管理2、微服务配置拉取3、配置热更新4、多环境配置共享 三、Nacos集群搭建1、初…

架构-嵌入式模块

章节架构 约三分,主要为选择题 #mermaid-svg-z6RGCDSEQT5AhE1p {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-z6RGCDSEQT5AhE1p .error-icon{fill:#552222;}#mermaid-svg-z6RGCDSEQT5AhE1p .error-text…

Apifox(1)比postman更优秀的接口自动化测试平台

Apifox介绍 Apifox 是 API 文档、API 调试、API Mock、API 自动化测试一体化协作平台,定位 Postman Swagger Mock JMeter。通过一套系统、一份数据,解决多个系统之间的数据同步问题。只要定义好 API 文档,API 调试、API 数据 Mock、API 自…

利用腾讯云函数隐藏C2服务器

1、简介 腾讯云函数,可以为企业和开发者提供无服务器执行环境,无需购买和管理服务器,只需要在腾讯云上使用平台支持的语言编写核心代码并设置代码运行的条件,即可在腾讯云基础设施上弹性 安全地运行代码。 C2服务器所有流量通过腾…

AB32VG1:SDK_AB53XX_V061(4)蓝牙音频测试笔记

文章目录 1. 淘宝上两种开发板,有一种的蓝牙功能不正常2. 蓝牙音频测试2.1 《config.h》和《Boombox.setting》两个配置以哪个为准2.2 codeblocks更换链接库2.2.1 这样进入build options是错的2.2.2 build options正确打开方式 2.3.编译工程,下载运行2.3…

手撕学生管理系统超详解——【c++】

题目要求:设计一个学生成绩管理程序,实现按班级完成对学生成绩信息的录入和修改,并用文件保存。 实现按班级输出学生的成绩单;实现按学号和姓名进行查询,按平均成绩进行排序功能。 问题描述 该程序的目标是提供一个简单且易于使用…

Linux本地搭建GitLab服务器 - 内网穿透远程访问

文章目录 前言1. 下载Gitlab2. 安装Gitlab3. 启动Gitlab4. 安装cpolar内网穿透5. 创建隧道配置访问地址6. 固定GitLab访问地址6.1 保留二级子域名6.2 配置二级子域名 7. 测试访问二级子域名 转载自cpolar极点云文章:Linux搭建GitLab私有仓库,并内网穿透实…

为什么我们需要API接口?API接口的核心又是什么?

API(Application Programming Interface)是一种连接不同软件之间的标准化的接口,可以让不同软件间进行数据交互和通信。API接口的作用很多,以下是几个主要的原因: 1.提高软件系统的灵活性和可扩展性。API接口可以将不…

Banana Pi BPI-R3 Mini:2.5GbE 嵌入式路由器板,MTK7986方案

香蕉派 BPI-R3 Mini Banana Pi BPI-R3 Mini 是一款功能强大的 SBC 路由器板,专为需要高速网络功能的个人和企业而设计。这款路由器是广受欢迎的 Banana Pi R3 路由器板的小兄弟,配备了先进的功能,旨在提供可靠的性能,是需要可靠网…

2.MATLAB篇——基本操作与矩阵输入

>> cos(((12345)^5)^0.5)ans -0.3623>> help sinsin - 参数的正弦,以弧度为单位此 MATLAB 函数 返回 X 的元素的正弦。sin 函数按元素处理数组。该函数同时接受实数和复数输入。 对于 X 的实数值,sin(X) 返回区间 [-1, 1] 内的实数值。 对于…

离散数学题目收集整理练习(期末过关进度50%)

✨博主:命运之光 🦄专栏:离散数学考前复习(知识点题) 🍓专栏:概率论期末速成(一套卷) 🐳专栏:数字电路考前复习 ✨博主的其他文章:点击…

flutter DevTools(1)

在VSCODE中调试 第一步: ① 切换到 vscode 的调试和运行模式, ② 配置好 .vscode 中的启动项 launch.json ③ 共有四种模式 [1] debug : 模式编译产物适合纯 Flutter 侧代码的开发、调试 [2] profile : 的用来做性能分析和测试 [3] release : 的用于打包发布 [4]…