环境准备
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.0.0</version>
</dependency>
需要使用poi包,可读取
读Excel
单个单元格读取
- 使用流打开excel表格
- poi生产Workbook对象
- 选择Sheet
- 选择Row
- 选择Cell
- 读取到某个单元格数据
下来直接上代码
//打开excel**-
FileInputStream fileInputStream = new FileInputStream("src/test/resources/cases_v1.xlsx");
//poi对象多态(适用多个版本) xxxFactory =》生成xxx对象
Workbook excel = WorkbookFactory.create(fileInputStream);
//选择sheet 按索引获取
Sheet sheet = excel.getSheetAt(0);
//选择row
Row row = sheet.getRow(2);
//选择cell
Cell cell = row.getCell(3);
//设置获得的值类型
cell.setCellType(CellType.STRING);
System.out.println(cell.getStringCellValue());
fileInputStream.close();
这里在获取Sheet时,我采用了根据索引获取,也可以采用根据名称获取
选择Sheet
//索引方式获取
Sheet sheet = excel.getSheetAt(0);
//名称方式获取
Sheet sheet = excel.getSheet("sheet名称");
选择Row
这里选择Excel的行。
//选择row
Row row = sheet.getRow(2);
选择单元格
Cell cell = row.getCell(3);
设置获得值的类型
在这里我设置了获得值得类型,这样可以使无论获得的值是什么类型,都转换为String类型,防止类型不同引起的异常,你也可以针对不同的类型数据使用不同的方法接收
//设置获得的值类型
cell.setCellType(CellType.STRING);
System.out.println(cell.getStringCellValue());
例如:根据布尔类型接收
cell.getBooleanCellValue()
批量读取
在我们的业务场景中对批量读取单元格还是多一些 ,下面介绍两种批量读取单元格的方法。直接上代码了
一、foreash版本
//选择row
for(Row row : sheet){
for (Cell cell : row){
cell.setCellType(CellType.STRING);
System.out.print(cell.getStringCellValue()+" ");
}
System.out.println();
}
二、根据最大行数量和最大列数量自行for循环读取
//获取row最大值
int lastRowNum = sheet.getLastRowNum();
for(int i=0;i<=lastRowNum;i++){
Row row = sheet.getRow(i);
//获取cell最大值
int lastCellNum = row.getLastCellNum();
for (int j=0;j<lastCellNum;j++){
Cell cell = row.getCell(j);
cell.setCellType(CellType.STRING);
System.out.print(cell.getStringCellValue()+" ");
}
System.out.println();
}
写Excel
这里的写可以说是修改,先读取Excel内容之后进行回写
这里将第五行位置2的单元格内容设置为了hhhhhhhhhhh
//打开excel**-
FileInputStream fileInputStream = new FileInputStream("src/test/resources/cases_v1.xlsx");
//poi对象多态(适用多个版本) xxxFactory =》生成xxx对象
Workbook excel = WorkbookFactory.create(fileInputStream);
//选择sheet 按索引获取
Sheet sheet = excel.getSheetAt(0);
//选择row
Row row = sheet.getRow(5);
//选择cell
Cell cell = row.getCell(2);
//设置获得的值类型
cell.setCellType(CellType.STRING);
System.out.println(cell.getStringCellValue());
cell.setCellValue("hhhhhhhhhhhhhh");
//创建输出流
FileOutputStream fileOutputStream = new FileOutputStream("src/test/resources/cases_v1.xlsx");
//回写
excel.write(fileOutputStream);
fileOutputStream.close();
fileInputStream.close();
防止数据为空引起的异常
Cell cell = row.getCell(n,Row.MissingCellPolicy.RETURN_BLANK_AS_NULL);
if (cell == null) {
//单元格数据为空
} else {
//数据正常
}
转载:https://blog.csdn.net/Maybe_ch/article/details/105939006
查看评论