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

相关文章

SpringBoot 异常处理/自定义格式校验的问题实例详解

《SpringBoot异常处理/自定义格式校验的问题实例详解》文章探讨SpringBoot中自定义注解校验问题,区分参数级与类级约束触发的异常类型,建议通过@RestControllerAdvice... 目录1. 问题简要描述2. 异常触发1) 参数级别约束2) 类级别约束3. 异常处理1) 字段级别约束

Spring Boot 3.x 中 WebClient 示例详解析

《SpringBoot3.x中WebClient示例详解析》SpringBoot3.x中WebClient是响应式HTTP客户端,替代RestTemplate,支持异步非阻塞请求,涵盖GET... 目录Spring Boot 3.x 中 WebClient 全面详解及示例1. WebClient 简介2.

在MySQL中实现冷热数据分离的方法及使用场景底层原理解析

《在MySQL中实现冷热数据分离的方法及使用场景底层原理解析》MySQL冷热数据分离通过分表/分区策略、数据归档和索引优化,将频繁访问的热数据与冷数据分开存储,提升查询效率并降低存储成本,适用于高并发... 目录实现冷热数据分离1. 分表策略2. 使用分区表3. 数据归档与迁移在mysql中实现冷热数据分

C#解析JSON数据全攻略指南

《C#解析JSON数据全攻略指南》这篇文章主要为大家详细介绍了使用C#解析JSON数据全攻略指南,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、为什么jsON是C#开发必修课?二、四步搞定网络JSON数据1. 获取数据 - HttpClient最佳实践2. 动态解析 - 快速

Spring Boot3.0新特性全面解析与应用实战

《SpringBoot3.0新特性全面解析与应用实战》SpringBoot3.0作为Spring生态系统的一个重要里程碑,带来了众多令人兴奋的新特性和改进,本文将深入解析SpringBoot3.0的... 目录核心变化概览Java版本要求提升迁移至Jakarta EE重要新特性详解1. Native Ima

Python使用openpyxl读取Excel的操作详解

《Python使用openpyxl读取Excel的操作详解》本文介绍了使用Python的openpyxl库进行Excel文件的创建、读写、数据操作、工作簿与工作表管理,包括创建工作簿、加载工作簿、操作... 目录1 概述1.1 图示1.2 安装第三方库2 工作簿 workbook2.1 创建:Workboo

SpringBoot集成EasyPoi实现Excel模板导出成PDF文件

《SpringBoot集成EasyPoi实现Excel模板导出成PDF文件》在日常工作中,我们经常需要将数据导出成Excel表格或PDF文件,本文将介绍如何在SpringBoot项目中集成EasyPo... 目录前言摘要简介源代码解析应用场景案例优缺点分析类代码方法介绍测试用例小结前言在日常工作中,我们经

SpringBoot+EasyPOI轻松实现Excel和Word导出PDF

《SpringBoot+EasyPOI轻松实现Excel和Word导出PDF》在企业级开发中,将Excel和Word文档导出为PDF是常见需求,本文将结合​​EasyPOI和​​Aspose系列工具实... 目录一、环境准备与依赖配置1.1 方案选型1.2 依赖配置(商业库方案)二、Excel 导出 PDF

spring中的@MapperScan注解属性解析

《spring中的@MapperScan注解属性解析》@MapperScan是Spring集成MyBatis时自动扫描Mapper接口的注解,简化配置并支持多数据源,通过属性控制扫描路径和过滤条件,利... 目录一、核心功能与作用二、注解属性解析三、底层实现原理四、使用场景与最佳实践五、注意事项与常见问题六

nginx -t、nginx -s stop 和 nginx -s reload 命令的详细解析(结合应用场景)

《nginx-t、nginx-sstop和nginx-sreload命令的详细解析(结合应用场景)》本文解析Nginx的-t、-sstop、-sreload命令,分别用于配置语法检... 以下是关于 nginx -t、nginx -s stop 和 nginx -s reload 命令的详细解析,结合实际应