首页 > 编程语言 >java读取Excel成List对象数组

java读取Excel成List对象数组

时间:2023-01-21 01:55:14浏览次数:36  
标签:java Excel List resultMap getCell sheet new row

文件IO是任何软件进行的重要组成部分,我们在电脑上创建一个Excel文件,然后打开它修改一些东西或者删除它。Java给我们提供了操纵文件的很多工具类,本文主要是使用POI操纵Excel文件。

1 介绍POI包的一些概念
Workbook: 这就是一个工作Excel文件。XSSFWorkbook 和 HSSFWorkbook classes都实现这个接口
XSSFWorkbook: 针对 XLSX 类型文件的一个实现.
HSSFWorkbook: 针对 XLS 类型文件的一个实现.
Sheet: 一个Excel的一个sheet页。XSSFSheet and HSSFSheet 都实现这个接口。
XSSFSheet: Sheet页的一个针对 XLSX 类型文件的实现.
HSSFSheet: Sheet页的一个针对 XLS 类型文件的实现.
Row: 一个sheet页中的一行数据。
Cell: 一个Excel最小框格,也就是确定行、确定列的一个框格。
2 具体实现
2.1 导入POM包
<!--POI 包-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>${poi.versin}</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>${poi.versin}</version>
</dependency>

2.2 根据文件流创建一个Workbook
可以使用WorkbookFactory自动根据Excel类型是XLSX还是XLS自动创建对应的Workbook

File file = new File(filePath + File.separator + fileName);
FileInputStream inputStream = new FileInputStream(file);
// 使用工厂模式 根据文件扩展名 创建对应的Workbook
Workbook workbook = WorkbookFactory.create(inputStream);

2.3 获取确定sheet页的数据
根据 sheet 页的名字获取 sheet 页数据

Sheet sheet = workbook.getSheet(sheetName);
1
2.4 获取总的数据行数
Sheet 类提供了获取首行行号和最后一行行号的方法,可以根据这两个方法获取 sheet 页中的数据行数。

int rowCount = sheet.getLastRowNum() - sheet.getFirstRowNum();
1
2.5 获取行列数据封装到Map中
如果只需要返回Map数据,到这里就可以返回结果

for (int i = 1; i < rowCount + 1; i++) {
Row row = sheet.getRow(i);
resultMap = new HashMap<>();
for (int j = 0; j < row.getLastCellNum(); j++) {
if(Objects.equals(row.getCell(j).getCellType(), CellType.STRING)) {
resultMap.put(sheet.getRow(0).getCell(j).toString(), row.getCell(j).getStringCellValue());
} else if(Objects.equals(row.getCell(j).getCellType(), CellType.NUMERIC)) {
resultMap.put(sheet.getRow(0).getCell(j).toString(), row.getCell(j).getNumericCellValue());
}else {
resultMap.put(sheet.getRow(0).getCell(j).toString(), row.getCell(j));
}
}
jsonObject = new JSONObject(resultMap);
resultMapList.add(jsonObject.toJSONString());
}

2.6 将结果数据转成List对象
使用 fasterxml.jackson 将Map结果数据转成 List 对象

return JsonUtil.ofList(resultMapList.toString(), tClass);
1
代码如下
/**
* 获取Excel,将数据转换成 List<T> 的形式
* Excel 数据要求第一行为对象的属性名称
*
* @param filePath 文件路径
* @param fileName 文件名称
* @param sheetName sheet名称
* @param tClass 要转换成的实体类
* @param <T>
* @return List对象数组
* @throws IOException
*/
public static <T> List<T> readExcelOfList(String filePath, String fileName, String sheetName, Class<T> tClass) throws IOException {
List<String> resultMapList = new ArrayList<>();
File file = new File(filePath + File.separator + fileName);
FileInputStream inputStream = new FileInputStream(file);
// 使用工厂模式 根据文件扩展名 创建对应的Workbook
Workbook workbook = WorkbookFactory.create(inputStream);
Sheet sheet = workbook.getSheet(sheetName);
int rowCount = sheet.getLastRowNum() - sheet.getFirstRowNum();
JSONObject jsonObject;
Map<String, Object> resultMap;
for (int i = 1; i < rowCount + 1; i++) {
Row row = sheet.getRow(i);
resultMap = new HashMap<>();
for (int j = 0; j < row.getLastCellNum(); j++) {
if(Objects.equals(row.getCell(j).getCellType(), CellType.STRING)) {
resultMap.put(sheet.getRow(0).getCell(j).toString(), row.getCell(j).getStringCellValue());
} else if(Objects.equals(row.getCell(j).getCellType(), CellType.NUMERIC)) {
resultMap.put(sheet.getRow(0).getCell(j).toString(), row.getCell(j).getNumericCellValue());
}else {
resultMap.put(sheet.getRow(0).getCell(j).toString(), row.getCell(j));
}
}
jsonObject = new JSONObject(resultMap);
resultMapList.add(jsonObject.toJSONString());
}
return JsonUtil.ofList(resultMapList.toString(), tClass);
}
原文 https://blog.csdn.net/Prepared/article/details/115801488

标签:java,Excel,List,resultMap,getCell,sheet,new,row
From: https://www.cnblogs.com/axin85/p/17063457.html

相关文章

  • 【Javaweb】Servlet五 | HTTP协议【详解】
    什么是HTTP协议什么是协议?协议是指双方或多方相互约定好,大家都需要遵守的规则,叫协议。所谓HTTP协议,就是指,客户端和服务器之间通信时,发送的数据,需要遵守的规则,叫做HTTP协......
  • 【Java应用服务体系】「序章入门」全方位盘点和总结调优技术专题指南
    专题⽬标本系列专题的目标是希望可以帮助读者们系统和全访问掌握应⽤系统调优的思路与方案以及相关的调优工具的使用,虽然未必会覆盖目前的所有的问题场景,但是还是提供了较......
  • java 包
    目录包包使用其他包中的类的规则:使用import导入(导包)......
  • excel的学习8
    工作表及页眉页脚操作工作表的相关操作什么是工作表也就是我们excel页面最下面的sheet相关操作移动sheet:把鼠标放在要移动的sheet,按住鼠标不放然后移动复制sheet:......
  • java 网络编程
    起因:学习网编,发现里面的课程大量用到了io的知识,十分影响学习,所以转战io何为“流”流:数据在数据源(文件)和程序(内存)之间经历的路径输入流:数据从数据源(文件)到程序(内存)的路径......
  • java HTML5
    HTML超文本标记语言W3C万维网联盟W3C标准包括:结构化标准语言(HTML,XML)表现标准语言(CSS)行为标准(DOM,ECMAScropt)网页基本信息使用进行注释!DOCTYPE告诉浏览器我们......
  • Java CSS3
    CSS层叠级联样式表快速入门CSS可以在html文件中写,写在<style>中,一般style写在head中(HTML,CSS没有分离)<style>h1(选择器){ 可以设置h1的属性(声明,分号结尾)}<......
  • java 多线程
    process进程thread线程三种创建方式Threadclass继承Thread类创建线程方式一:继承Thread类,重写run()方法,调用start开启线程(如果是直接调用run方法,实际上是在main线......
  • javaWeb
    在java中,动态web资源开发的技术统称为JavaWeb一些默认tomcat:8080mysql:3306http:80https:443默认的主机名:loaclhost->127.0.0.1默认网站应用存放的位置:webapps......
  • javaScript
    JavaScript是一门流行脚本快速入门跟css一样,可以直接写在html中,放在script标签中alert可以弹出弹窗,内容用单引号引入的时候一定要成对出现,不能自闭和基本语法入门......