POI解析.xlsx格式的Excel文件

2024-08-25 07:38
文章标签 excel xlsx 解析 格式 poi

本文主要是介绍POI解析.xlsx格式的Excel文件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

POI解析.xlsx格式的Excel文件

声明:POI版本较多,在使用前,一定要确认版本再进行使用。
目标:写一个解析.xlsx格式Excel文件工具类
环境准备
① poi-4.0.1:可在POI官网上直接进入下载页面进行下载;
② JDK1.8;
③ 自行准备一个.xlsx格式Excel文件用于测试

霸气小学三年级二班语文成绩单
学号姓名班级成绩是否及格出生日期年龄性别备注
101001赵的三年级二班93.5TRUE1990/1/129
101002钱有三年级二班86.5TRUE1990/1/229
101003孙有三年级二班79TRUE1990/1/329
101004李折三年级二班96TRUE1990/1/429
101005周克三年级二班76TRUE1990/1/529
101006吴睥三年级二班86TRUE1990/1/629坏学生
101007郑卡拉三年级二班84.5TRUE1990/1/729
101008王紫气三年级二班86.5TRUE1990/1/829
101009冯和三年级二班80.5TRUE1990/1/929
101010陈中三年级二班54FALSE1990/1/1029请假中
101011褚淡三年级二班86.5TRUE1990/1/1129

、创建一个javaProject工程:test:
、在工程中创建一个文件夹并命名为lib,然后将poi所需jar包导入进来,如下图所示。导入后记得将所有jar包Build Path。

本文使用的POI版本为4.0.1,所必需的jar包有:

序号架包
1commons-collections4-4.2.jar
2commons-compress-1.18.jar
3poi-4.0.1.jar
4poi-ooxml-4.0.1.jar
5poi-ooxml-schemas-4.0.1.jar
6xmlbeans-3.0.2.jar

不同版本可能所需的jar包存在差异。
、在工程中创建一个文件夹并命名为resources,并将准备好的excel文件放入其中,如上图所示。
四、创建一个工具类PoiUtil.java,代码如下:

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.DateUtil;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;public class PoiUtil {private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");/*** 获取Excel第一个sheet页的数据,返回二维数组,默认从第一行开始读取* * @param excelPath excel文件路径* @return* @throws Exception*/public static String[][] getExcelRows(String excelPath) throws Exception {return getExcelRows(excelPath, 0);}/*** 获取Excel第一sheet的数据,返回二维数组* * @param excelPath excel文件路径* @param startRowIndex 从第几行的下标开始读取(第1行的下标为0)* @return* @throws Exception*/public static String[][] getExcelRows(String excelPath, int startRowIndex)throws Exception {// 下标必须大于等于0if (startRowIndex < 0) {throw new Exception("无效的下标:[" + startRowIndex + "]");}// 指定excel文件必须存在if (!new File(excelPath).exists()) {throw new Exception("指定文件不存在:[" + excelPath + "]");}// 获取excel文件总列数,总行数,并由这两个数据定义一个二维数组用以存放解析出来的excel数据int lastRowNum = 0;// 最后 一行的下标,该下标加1即为总行数int lastCellNum = 0;// 最后一列的下标String[][] objList = null;InputStream is = null;Workbook workbook = null;try {// 获取文件流is = new FileInputStream(excelPath);// 使用XSSFWorkbook将xlsx格式文件输入流转换成Workbook接口,之后就可通过该接口操作excel文件 的读取了workbook = new XSSFWorkbook(is);// 获取第一个sheet页Sheet sheet = workbook.getSheetAt(0);// 最后一行的下标,从0开始lastRowNum = sheet.getLastRowNum();// 最后一列的下标,从0开始if (lastRowNum != 0) {lastCellNum = sheet.getRow(0).getLastCellNum();} else {// excel没有数据return new String[0][0];}objList = new String[lastRowNum-startRowIndex+1][lastCellNum+1];// 遍历每行Row row = null;for (int i = startRowIndex; i <= lastRowNum; i++) {row = sheet.getRow(i);// 遍历每一列String[] colArrays = new String[lastCellNum + 1];for (int j = 0; j <= lastCellNum; j++) {colArrays[j] = getCellValue(row.getCell(j));}objList[i - startRowIndex] = colArrays;}} catch (Exception e) {throw e;} finally {if (workbook != null) {workbook.close();}if (is != null) {is.close();}}return objList;}/*** 获取单元格的值,返回字符串类型* * @param cell* @return* @throws Exception*/private static String getCellValue(Cell cell) throws Exception {if (cell == null) {return null;}String cellValue = null;// 获取单元格类型,CellType为枚举类型。(在低版本时,getCellType得到的可能是整数,所以在这里体现出版本差异)CellType cellType = cell.getCellType();// 根据单元格类型获取单元格的值if (CellType.BLANK == cellType) {cellValue = null;} else if (CellType.STRING == cellType) {cellValue = cell.getStringCellValue().trim();} else if (CellType.BOOLEAN == cellType) {cellValue = String.valueOf(cell.getBooleanCellValue());} else if (CellType.NUMERIC == cellType) {// 日期类型则转换成yyyy-MM-dd格式字符串if (DateUtil.isCellDateFormatted(cell)) {cellValue = sdf.format(cell.getDateCellValue());} else {// 数字类型先转换成字符串类型,再获取字符串cell.setCellType(CellType.STRING);cellValue = cell.getStringCellValue().trim();}} else {throw new Exception("获取单元格失败!");}return cellValue;}

在该工具类中创建一个main方法,并测试

 public static void main(String[] args) throws Exception {String[][] rows = PoiUtil.getExcelRows("resources/student.xlsx", 2);for (int i = 0; i < rows.length; i++) {String[] row = rows[i];for (int j = 0; j < row.length; j++) {System.out.print(row[j] + "\t");}System.out.println();}}

运行结果
101001 赵的 三年级二班 93.5 true 1990-01-01 29 男 null
101002 钱有 三年级二班 86.5 true 1990-01-02 29 男 null
101003 孙有 三年级二班 79 true 1990-01-03 29 男 null
101004 李折 三年级二班 96 true 1990-01-04 29 男 null
101005 周克 三年级二班 76 true 1990-01-05 29 男 null
101006 吴睥 三年级二班 86 true 1990-01-06 29 男 坏学生
101007 郑卡拉 三年级二班 84.5 true 1990-01-07 29 男 null
101008 王紫气 三年级二班 86.5 true 1990-01-08 29 男 null
101009 冯和 三年级二班 80.5 true 1990-01-09 29 男 null
101010 陈中 三年级二班 54 false 1990-01-10 29 男 请假中
101011 褚淡 三年级二班 86.5 true 1990-01-11 29 女 null

这篇关于POI解析.xlsx格式的Excel文件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1104951

相关文章

使用SQL语言查询多个Excel表格的操作方法

《使用SQL语言查询多个Excel表格的操作方法》本文介绍了如何使用SQL语言查询多个Excel表格,通过将所有Excel表格放入一个.xlsx文件中,并使用pandas和pandasql库进行读取和... 目录如何用SQL语言查询多个Excel表格如何使用sql查询excel内容1. 简介2. 实现思路3

python实现pdf转word和excel的示例代码

《python实现pdf转word和excel的示例代码》本文主要介绍了python实现pdf转word和excel的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录一、引言二、python编程1,PDF转Word2,PDF转Excel三、前端页面效果展示总结一

IDEA如何将String类型转json格式

《IDEA如何将String类型转json格式》在Java中,字符串字面量中的转义字符会被自动转换,但通过网络获取的字符串可能不会自动转换,为了解决IDEA无法识别JSON字符串的问题,可以在本地对字... 目录问题描述问题原因解决方案总结问题描述最近做项目需要使用Ai生成json,可生成String类型

Python实现将实体类列表数据导出到Excel文件

《Python实现将实体类列表数据导出到Excel文件》在数据处理和报告生成中,将实体类的列表数据导出到Excel文件是一项常见任务,Python提供了多种库来实现这一目标,下面就来跟随小编一起学习一... 目录一、环境准备二、定义实体类三、创建实体类列表四、将实体类列表转换为DataFrame五、导出Da

Python数据处理之导入导出Excel数据方式

《Python数据处理之导入导出Excel数据方式》Python是Excel数据处理的绝佳工具,通过Pandas和Openpyxl等库可以实现数据的导入、导出和自动化处理,从基础的数据读取和清洗到复杂... 目录python导入导出Excel数据开启数据之旅:为什么Python是Excel数据处理的最佳拍档

使用Python处理CSV和Excel文件的操作方法

《使用Python处理CSV和Excel文件的操作方法》在数据分析、自动化和日常开发中,CSV和Excel文件是非常常见的数据存储格式,ython提供了强大的工具来读取、编辑和保存这两种文件,满足从基... 目录1. CSV 文件概述和处理方法1.1 CSV 文件格式的基本介绍1.2 使用 python 内

使用Python实现批量访问URL并解析XML响应功能

《使用Python实现批量访问URL并解析XML响应功能》在现代Web开发和数据抓取中,批量访问URL并解析响应内容是一个常见的需求,本文将详细介绍如何使用Python实现批量访问URL并解析XML响... 目录引言1. 背景与需求2. 工具方法实现2.1 单URL访问与解析代码实现代码说明2.2 示例调用

SSID究竟是什么? WiFi网络名称及工作方式解析

《SSID究竟是什么?WiFi网络名称及工作方式解析》SID可以看作是无线网络的名称,类似于有线网络中的网络名称或者路由器的名称,在无线网络中,设备通过SSID来识别和连接到特定的无线网络... 当提到 Wi-Fi 网络时,就避不开「SSID」这个术语。简单来说,SSID 就是 Wi-Fi 网络的名称。比如

Python使用Pandas库将Excel数据叠加生成新DataFrame的操作指南

《Python使用Pandas库将Excel数据叠加生成新DataFrame的操作指南》在日常数据处理工作中,我们经常需要将不同Excel文档中的数据整合到一个新的DataFrame中,以便进行进一步... 目录一、准备工作二、读取Excel文件三、数据叠加四、处理重复数据(可选)五、保存新DataFram

SpringCloud配置动态更新原理解析

《SpringCloud配置动态更新原理解析》在微服务架构的浩瀚星海中,服务配置的动态更新如同魔法一般,能够让应用在不重启的情况下,实时响应配置的变更,SpringCloud作为微服务架构中的佼佼者,... 目录一、SpringBoot、Cloud配置的读取二、SpringCloud配置动态刷新三、更新@R