Poi介绍
Poi是由apache公司提供的Java编写的免费开源跨平台的Java API,提供让Java程序对Microsoft Office档案读和写的功能。也是目前针对Excel读写比较常用的实现方案。
使用前提,需要导入对应的依赖
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.9</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.9</version>
</dependency>
Poi包结构:
HSSF —— 读写 Microsoft Excel xls(07版本之前的Excel)
XSSF —— 读写 Microsoft Excel OOXML XLSX(07版本之后的Excel)
HWPF —— 读写 Word
HSLF —— 读写 PowerPoint(PPT)
主要使用 XSSF
读取Excel
Poi如何读取操作表格?其实在Poi内部封装了一些对象
XSSFWorkbook:工作簿
XSSFSheet:工作表
Row:行
Cell:单元格
具体操作
那么我们在测试类中新建poitest包,然后新建一个Product类型,这个类型就是模仿实体类的类型
import lombok.AllArgsConstructor;
import lombok.Data;
@Data
@AllArgsConstructor
public class Product { private Integer id; private String name; private Double price; private Integer count; }
然后我们再来新建一个测试类型,用户解析表格中的数据,将具体数据保存到Product类型中
/** * 利用Poi读取excel表格数据 */
public class readDemo { public static void main(String[] args) {
try {
List<Product> products = read("E:\idea-family/a.xlsx");
System.out.println(products);
}catch (Exception e) {
e.printStackTrace();
}
}
public static List<Product> read(String path) throws Exception {
List<Product> products = new ArrayList<>();
// 1. 创建输入流
FileInputStream fip = new FileInputStream(path);
// 2. 再输入流中获取工作簿
XSSFWorkbook workbook = new XSSFWorkbook(fip);
// 3. 在工作簿中获取目标工作表
Sheet sheet = workbook.getSheetAt(0);
// 4. 获取工作表中的行数(有数据的)
int rowNum = sheet.getPhysicalNumberOfRows();
// 5. 遍历所有的行,但是要注意第一行标题不获取,所以从下标1开始获取
for(int i = 1;i<rowNum;i++){
// 获取所有行
Row row = sheet.getRow(i);
if(row!=null){
//用于保存每条数据的集合
List<String> list = new ArrayList<>();
for (Cell cell : row) {
if(cell!=null){
//把单元各种的所有数据格式设置为String
cell.setCellType(Cell.CELL_TYPE_STRING);
//获取所有单元格数据
String value = cell.getStringCellValue();
if(value!=null&&!value.equals("")){
//将每个单元格的数据存储到集合中
list.add(value);
}
}
}
//把获取到的每一条数据封装成一个Product类型
if(list.size()>0){ Product product = new Product(Integer.parseInt(list.get(0)),list.get(1),Double.parseDouble(list.get(2)),Integer.parseInt(list.get(3)));
//将product封装到list集合中
products.add(product);
}
}
}
return products;
}
}
最后我们进行测试,数据保存到了实体类集合中
版权声明:本文为tomorrowAO原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。