POI Excel导入
文介绍了一种使用Java编程语言从本地Excel文件中读取数据的方法。通过利用Apache POI库,实现了对Excel文件的读取、解析及数据处理流程。文章详细展示了如何创建文件流、工作簿、表单及行,并对每行数据进行遍历,根据不同的数据类型转换为相应的Java类型。此外,还介绍了如何将解析后的数据存储到数据库中。
@GetMapping("/uploadExcel")
public void uploadExcel() throws Exception {
AreaEntity areaEntity = new AreaEntity();
List<AreaEntity> list = new ArrayList<>();
//文件路径
String path = "C:\\Users\\Administrator\\Downloads\\";
//获取文件流
FileInputStream inputStream = new FileInputStream(path + "Excel下载 .xls");
//创建工作簿
HSSFWorkbook workbook = new HSSFWorkbook(inputStream);
//根据索引获取表
HSSFSheet sheet = workbook.getSheetAt(0);
//获取excel数据多少行数据(数据行数=总行数-表头行数)
int lastRowNum = sheet.getLastRowNum();
for (int i = 1; i < lastRowNum; i++) {
HSSFRow row = sheet.getRow(i);
//判断行非空
if (row != null) {
//获取列数
int cells = row.getPhysicalNumberOfCells();
for (int j = 0; j < cells; j++) {
HSSFCell cell = row.getCell(j);
//判断列非空
if (cell != null) {
//匹配列的数据类型
int cellType = cell.getCellType();
String value = null;
switch (cellType) {
case HSSFCell.CELL_TYPE_STRING: //字符串
value = cell.getStringCellValue();
break;
case HSSFCell.CELL_TYPE_BOOLEAN: //布尔
value = String.valueOf(cell.getBooleanCellValue());
break;
case HSSFCell.CELL_TYPE_BLANK: //空
break;
case HSSFCell.CELL_TYPE_NUMERIC: //数字(日期、普通数字)
if (HSSFDateUtil.isCellDateFormatted(cell)) { //日期
Date date = cell.getDateCellValue();
value = new DateTime(date).toString("yyyy-MM-dd");
} else {
//不是日期格式,防止数字过长
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
value = cell.toString();
}
break;
case HSSFCell.CELL_TYPE_ERROR:
break;
}
switch (j){
case 0 : areaEntity.setId(Integer.parseInt(value));
case 1 : areaEntity.setAreaid(value);
case 2 : areaEntity.setArea(value);
case 3 : areaEntity.setCityid(value);
}
}
}
}
//保存数据库
areaService.save(areaEntity);
}
}