使用Java完成Excel文件的上传、内容的解析和以及保存操作。重点主要在于使用org.apache.poi包下的Workbook类完成对Excel内容的解析
首先pom文件引入Apache poi,
org.apache.poi
poi-ooxml
3.9
Apache POI提供API给Java程序对Microsoft Office(Excel、Word、PowerPoint等)格式档案读和写的功能
代码顺序为
controller → service → mapper
controller
接口用于接收前台页面上传的excel文件,并对MultipartFile参数做一些基本的判断
@Controller
@RequestMapping("/upload")
public class UploadExcelFileController {
private static final Logger LOGGER = LoggerFactory.getLogger(UploadExcelFileController.class);
@Autowired
private UploadExcelFileService uploadExcelFileService;
@PostMapping("/excelFile")
@ResponseBody
public ResponseResult uploadExcel(@RequestParam(value = "excelFile") MultipartFile file) {
LOGGER.debug("开始上传Excel文件");
ResponseResult result = new ResponseResult();
try {
if (file == null) {
// 文件不能为空
LOGGER.info("file参数为空!");
result.setCode(IStatusMessage.SystemStatus.NOT_ALLOWED_EMPTY_FILE.getCode());
result.setMessage(IStatusMessage.SystemStatus.NOT_ALLOWED_EMPTY_FILE.getMessage());
return result;
}
String fileName = file.getOriginalFilename();
if (!fileName.matches("^.+\\.(?i)(xls)$") && !fileName.matches("^.+\\.(?i)(xlsx)$")) {
// 文件格式不正确
LOGGER.info("Excel文件格式不正确!");
result.setCode(IStatusMessage.SystemStatus.FILE_FORMAT_IS_INCORRECT.getCode());
result.setMessage(IStatusMessage.SystemStatus.FILE_FORMAT_IS_INCORRECT.getMessage());
return result;
}
long size = file.getSize();
if (StringUtils.isEmpty(fileName) || size == 0) {
// 文件不能为空
LOGGER.info("Excel文件内容为空!");
result.setCode(IStatusMessage.SystemStatus.NOT_ALLOWED_EMPTY_FILE.getCode());
result.setMessage(IStatusMessage.SystemStatus.NOT_ALLOWED_EMPTY_FILE.getMessage());
return result;
}
result = uploadExcelFileService.uploadExcel(fileName, file, existUser.getId(), result);
if (result.getMessage().equals("success")) {
//保存成功
LOGGER.info("上传Excel文件,文件上传成功!");
result.setCode(IStatusMessage.SystemStatus.UPLOAD_EXCEL_SUCCESS.getCode());
result.setMessage(IStatusMessage.SystemStatus.UPLOAD_EXCEL_SUCCESS.getMessage());
}
} catch (ServiceException e) {
e.printStackTrace();
result.setCode(IStatusMessage.SystemStatus.REQUEST_FAILED.getCode());
result.setMessa