1.基本概念:POI:简单的说就是对office的文档进行读和写的工具,POI中的组件(HSSF和XSS)可以读写excel,其中HSSF和XSS还是有区别的。HSSF:它是用来操作97格式的excel,扩展名为.xls,纯二进制,最大行数65535。而XSS:它是用来操作2007格式的excel,扩展名为.xlsx,压缩的xml ,最大无限行.开发中优先选.xls
2.基本案列:点击上传按钮,实现excel数据的导入(给予maven开发)
2.1:引入坐标
2.2:创建对象(获取工作薄),
打开工作表
获取行(读数据)
获取格(读数据)
实体类的封装
在运用相应的技术保存数据
3.示例代码:
//注入service
@Autowired
private AreaService areaService;
//导入excel数据
@Action("area_importData")
public String importData(){
//目标:读excel,入库
List<Area> areaList=new ArrayList<>();
try {
//技巧:平时怎么读,代码怎么写。
//1.打开工作簿(97格式)
HSSFWorkbook workbook=new HSSFWorkbook(new FileInputStream(upload));
//2.从工作簿中打开工作表
//workbook.getSheet("Sheet1");//根据名字读取工作表
HSSFSheet sheet = workbook.getSheetAt(0);//g根据索引来读取工作表0-based physical & logical
//3.一行一行读
for (Row row : sheet) {
//第一行一般是标题,要跳过
if(row.getRowNum()==0){
continue;
}
//一格一格读数据
String id = row.getCell(0).getStringCellValue();
String province = row.getCell(1).getStringCellValue();
String city = row.getCell(2).getStringCellValue();
String district = row.getCell(3).getStringCellValue();
String postcode = row.getCell(4).getStringCellValue();
//将值封装到对象
Area area=new Area();
area.setId(id);
area.setProvince(province);
area.setCity(city);
area.setDistrict(district);
area.setPostcode(postcode);
//将对象填入集合
areaList.add(area);
}
//批量将区域保存到数据库
areaService.saveArea(areaList);
} catch (Exception e) {
e.printStackTrace();
}
return NONE;
}
//坐标引入
<poi.version>3.17</poi.version>
<!-- Apache POI -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>${poi.version}</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>${poi.version}</version>
</dependency>
//注入service
@Autowired
private AreaService areaService;
//导入excel数据
@Action("area_importData")
public String importData(){
//目标:读excel,入库
List<Area> areaList=new ArrayList<>();
try {
//技巧:平时怎么读,代码怎么写。
//1.打开工作簿(97格式)
HSSFWorkbook workbook=new HSSFWorkbook(new FileInputStream(upload));
//2.从工作簿中打开工作表
//workbook.getSheet("Sheet1");//根据名字读取工作表
HSSFSheet sheet = workbook.getSheetAt(0);//g根据索引来读取工作表0-based physical & logical
//3.一行一行读
for (Row row : sheet) {
//第一行一般是标题,要跳过
if(row.getRowNum()==0){
continue;
}
//一格一格读数据
String id = row.getCell(0).getStringCellValue();
String province = row.getCell(1).getStringCellValue();
String city = row.getCell(2).getStringCellValue();
String district = row.getCell(3).getStringCellValue();
String postcode = row.getCell(4).getStringCellValue();
//将值封装到对象
Area area=new Area();
area.setId(id);
area.setProvince(province);
area.setCity(city);
area.setDistrict(district);
area.setPostcode(postcode);
//将对象填入集合
areaList.add(area);
}
//批量将区域保存到数据库
areaService.saveArea(areaList);
} catch (Exception e) {
e.printStackTrace();
}
return NONE;
}