//前端excel只需要直接提交form表单即可
public AjaxResult excelAdd(@RequestPart("file") MultipartFile file) throws Exception {
if (file.isEmpty()) {
return AjaxResult.error("没有发现文件");
}
if (StringUtils.isNotBlank(file.getOriginalFilename())) {
String filename = file.getOriginalFilename();
//excel2003
if (filename.split("\\.")[1].equals("xls")) {
//POI导入文件,存放到list集合
HSSFWorkbook workbook = new HSSFWorkbook(new POIFSFileSystem(file.getInputStream()));
//意思是有几个文件,一个excel可能有多个sheet,这里只读取第一个
int sheets = workbook.getNumberOfSheets();
//只读取第一个sheet
HSSFSheet sheetAt = workbook.getSheetAt(0);
//这个表示当前sheet有多少行数据,一行一行读取就行
int rows = sheetAt.getPhysicalNumberOfRows();
for (int i = 0; i < rows; i++) {
//某一行的数据,是一行一行的读取
HSSFRow row = sheetAt.getRow(i);
String value = getCellValue(row.getCell(0));
System.out.println(value);
}
}
if (filename.split("\\.")[1].equals("xlsx")) {
XSSFWorkbook workbook = new XSSFWorkbook(file.getInputStream());
//意思是有几个文件,一个excel可能有多个sheet,这里只读取第一个
int sheets = workbook.getNumberOfSheets();
//只读取第一个sheet
XSSFSheet sheetAt = workbook.getSheetAt(0);
//这个表示当前sheet有多少行数据,一行一行读取就行,但是会把没有数据的行读出来,需要加异常处理
int rows = sheetAt.getPhysicalNumberOfRows();
for (int i = 0; i < rows; i++) {
//某一行的数据,是一行一行的读取
XSSFRow row = sheetAt.getRow(i);
String value = getCellValue(row.getCell(0));
if (StringUtils.isNotBlank(value)){
System.out.println(value);
}
}
}
}
return AjaxResult.success();
}
public static String getCellValue(Cell cell) {
String cellValue = "";
// 以下是判断数据的类型
switch (cell.getCellTypeEnum()) {
case NUMERIC: // 数字
if (org.apache.poi.ss.usermodel.DateUtil.isCellDateFormatted(cell)) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
cellValue = sdf.format(org.apache.poi.ss.usermodel.DateUtil.getJavaDate(cell.getNumericCellValue())).toString();
} else {
DataFormatter dataFormatter = new DataFormatter();
cellValue = dataFormatter.formatCellValue(cell);
}
break;
case STRING: // 字符串
cellValue = cell.getStringCellValue();
break;
case BOOLEAN: // Boolean
cellValue = cell.getBooleanCellValue() + "";
break;
case FORMULA: // 公式
cellValue = cell.getCellFormula() + "";
break;
case BLANK: // 空值
cellValue = "";
break;
case ERROR: // 故障
cellValue = "非法字符";
break;
default:
cellValue = "未知类型";
break;
}
return cellValue;
}