Java读取excel指定行列的数据(poi的方式)
Posted ThiefOfTime
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java读取excel指定行列的数据(poi的方式)相关的知识,希望对你有一定的参考价值。
文章目录
一、前言
JAVA中的POI是一个由Apache提供的jar包,用于支持处理Excel、Word、PPT等文件。它是一套用Java编写的免费开源的跨平台的 Java API;用于给Java程序,访问微软格式文档Microsoft Office,读和写的功能的Java API。
二、业务需求背景
项目需要读取excel中部分行列的内容(可以延申为读取一个excel中的内容,并且这个excel中的行数和列数是动态变化的)。然后把读到的内容转化为Json格式的数据。
这是excel文件内容,要将这个文件中的内容读出并转化 为json格式的数据:(这里只是列举部分数据,Json格式已经体现了)
'p10':
'3': 0.75
'4': 0.428
'6': 0.289
'8': 0.22
'10': 0.191
'12': 0.158
'14': 0.14
'16': 0.125
'18': 0.121
'20': 0.113
'p20':
'3': 0.652
'4': 0.412
'6': 0.267
'8': 0.179
'10': 0.141
'12': 0.138
'14': 0.116
'16': 0.109
'18': 0.12
'20': 0.122
三、解决思路
- 把每个单元格当作一个对象,这个对象中包含横坐标,纵坐标,单元格中的数据值。
- 找出表头行(也就是第二行,因为第一行中的数据用不到,所以不需要读取,笔者的需求是这样的)。
- 找出表头列(也就是第一列)。
- 按照要求的格式拼接数据(要求的格式比如说是json或者其他格式进行拼接)。
四、实现方案
1.引入pom
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.2</version>
</dependency>
2.按照解决思路2、3、4进行代码的编写
//获取文件路径
String filePath = "D:\\\\TI.xls";
File file = new File(filePath);
//获取文件后缀
String finishFile = filePath.substring(turbulenceCurveFile.lastIndexOf(".") + 1);
InputStream inputStream = new FileInputStream(file);
//这里需要注意XSSFWorkbook能够处理xlsx的文件
//而HSSFWorkbook能够处理xls的文件,不然会报错,这样写是为了更好的兼容处理两种格式
Workbook workbook;
if ("xlsx".equals(finishFile))
workbook = new XSSFWorkbook(inputStream);
else
workbook = new HSSFWorkbook(inputStream);
//这里是读取第几个sheet
Sheet sheet = workbook.getSheetAt(0);
//这里是读取总行数
int rows = sheet.getPhysicalNumberOfRows();
List<CoordinateVO> allList = new ArrayList<>();
//1.找到所有的元素对象,然后用list存放
for (int i = 1; i < rows; i++)
Row row = sheet.getRow(i);//获取每一行
int columns = 0;
if (1 == i)
//获取每一行的最后一列的列号,即总列数,这里需要注意一下,
//这种方法读取第一行的列数的时候会多读取一列,所以这里要减1
columns = row.getLastCellNum() - 1;
else
columns = row.getLastCellNum();
for (int j = 0; j < columns; j++)
//获取每个单元格
Cell cell = row.getCell(j);
//设置单元格类型
cell.setCellType(CellType.STRING);
//获取单元格数据
String cellValue = cell.getStringCellValue();
CoordinateVO coordinateVO = new CoordinateVO();
coordinateVO.setCoordinateX(i);
coordinateVO.setCoordinateY(j);
coordinateVO.setDataValue(cellValue);
allList.add(coordinateVO);
//至此,所有的数据都已经获取完了,并且都存放在allList这个集合当中去了
//接下来就是自己去拼接数据格式了,相信各位大佬这里应该没有问题,以下代码就不贴了
3.补充贴一下代码中的实体类
@Data
@AllArgsConstructor
@NoArgsConstructor
public class CoordinateVO
/**
* excel中的横坐标
*/
private Integer coordinateX;
/**
* excel中的纵坐标
*/
private Integer coordinateY;
/**
* excel中的每个单元格的数据值
*/
private String dataValue;
4.代码中关键点的说明
操作Excel包括对象Workbook(工作簿),Sheet(工作表) ,Cell(单元格)。一个Excel就对应一Workbook对象,一个Workbook可以有多个Sheet对象,一个Sheet对象可以有多个Cell对象。
说明:本文是通过poi的方式对excel进行操作,如果想通过jxl的方式对excel进行操作的话,可以点击链接:java使用jxl读取execl中的数据
备注:本文为作者原创作品,有什么不正确的地方希望各位大神能指出不当之处,笔者当虚心受教。不喜勿喷。(转载请说明出处)谢谢!
POI读取指定Excel中行与列的数据
import org.apache.poi.xssf.usermodel.XSSFCell; import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.io.FileInputStream; import java.io.InputStream; public class PoiExcelTest public static XSSFWorkbook workbook; // 工作簿 public static XSSFSheet sheet; // 工作表 public static XSSFRow row; // 行 public static XSSFCell cell; // 列 public static void main(String[] args) throws Exception String fielName = "E:\\\\ExcelTest.xlsx"; String sheetName = "AI研发中心"; readExcelData(fielName,sheetName,2,1); readExcelData(fielName,sheetName,2,2); public static void readExcelData(String fielName,String sheetName,int rownum,int cellnum) throws Exception InputStream in = new FileInputStream(fielName); workbook = new XSSFWorkbook(in); sheet = workbook.getSheet(sheetName); row = sheet.getRow(rownum); cell = row.getCell(cellnum); switch (cell.getCellType()) case XSSFCell.CELL_TYPE_NUMERIC: System.out.println("第"+(rownum+1)+"行"+"第"+(cellnum+1)+"列的值: "+String.valueOf(cell.getNumericCellValue())); break; case XSSFCell.CELL_TYPE_STRING: System.out.println("第"+(rownum+1)+"行"+"第"+(cellnum+1)+"列的值: "+cell.getStringCellValue()); break; default: System.out.println("第"+(rownum+1)+"行"+"第"+(cellnum+1)+"列的值: "+cell.getStringCellValue()); break;
Excel数据:
读取的数据:
以上是关于Java读取excel指定行列的数据(poi的方式)的主要内容,如果未能解决你的问题,请参考以下文章
1. Java POI 读取写入Excel(包括样式)的工具类Utils
javapoi数据导出成excel如何才能指定文件输出路径 现在是知道E盘路径 怎么弄成弹框选择路径