easypoi导入数据
依赖:
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-spring-boot-starter</artifactId>
</dependency>
实现:
importAttdMonthData(@RequestParam(value = "file") MultipartFile simpleFile, HttpServletRequest request,
HttpServletResponse response) throws Exception{
ImportParams params = new ImportParams();
// 注意,此处excel模板上,第一行要是标题,第二行开始是数据
params.setTitleRows(0);
params.setHeadRows(1);
params.setNeedVerify(true);
params.setVerifyGroup(new Class[]{Default.class});
params.setVerifyHandler(excelAttdMonthDataVerifyHandler);
ExcelImportResult<AttdMonthDataExcelVO> result = ExcelImportUtil.importExcelMore(simpleFile.getInputStream(), AttdMonthDataExcelVO.class,params);
if (result.isVerifyFail()) {
return R.validFail(result.getFailList().stream()
.map(item -> StrUtil.format("第{}行检验错误: {}", item.getRowNum(), item.getErrorMsg()))
.collect(Collectors.joining("<br/>")));
}
List<AttdMonthDataExcelVO> list = result.getList();
if(CollUtil.isEmpty(list)){
return this.validFail("导入数据不能为空");
}
List<AttdMonthStatistic> data = list.stream().map(item -> {
AttdMonthStatistic param = new AttdMonthStatistic();
BeanUtils.copyProperties(item, param);
return param;
}).collect(Collectors.toList());
baseService.saveBatch(data);
其中,
(1)excelAttdMonthDataVerifyHandler 是数据校验:
ExcelAttdMonthDataVerifyHandler implements IExcelVerifyHandler<AttdMonthDataExcelVO> {
@Override
public ExcelVerifyHandlerResult verifyHandler(AttdMonthDataExcelVO obj) {
StringBuilder builder = new StringBuilder();
boolean bool = true;
if (StrUtil.isEmpty(obj.getStaffName()) || StrUtil.isEmpty(obj.getStaffNo())
|| StrUtil.isEmpty(obj.getAttdMonth())) {
builder.append("员工姓名或者员工工号或者考勤月份不能为空,");
bool = false;
}
/**
* else{
// 检验当前员工当月是否已存在考勤数据
// todo: boolean check = attdMonthStatisticService.checkExist(obj.getStaffName(),obj.getStaffNo(),obj.getAttdMonth());
if (1 > 0) {
builder.append(StrUtil.format("员工{}工号{}当月已存在考勤统计数据", obj.getStaffName(), obj.getStaffNo()));
bool = false;
}
}
*/
return new ExcelVerifyHandlerResult(bool, builder.toString());
}
(2)excel与数据映射的实体vo,要实现接口才能用:
AttdMonthDataExcelVO implements Serializable, IExcelModel, IExcelDataModel {
private static final long serialVersionUID = 1L;
private String errorMsg;
private Integer rowNum;
/**
* 员工姓名
*/
@ApiModelProperty(value = "员工姓名")
@Length(max = 255, message = "员工姓名长度不能超过255")
@Excel(name = "员工姓名")
private String staffName;
/**
* 获取行号
*
* @return
*/
@Override
public Integer getRowNum() {
return rowNum;
}
/**
* 设置行号
*
* @param rowNum
*/
@Override
public void setRowNum(Integer rowNum) {
this.rowNum = rowNum;
}
/**
* 获取错误数据
*
* @return
*/
@Override
public String getErrorMsg() {
return errorMsg;
}
/**
* 设置错误信息
*
* @param errorMsg
*/
@Override
public void setErrorMsg(String errorMsg) {
this.errorMsg = errorMsg;
}
你接受吗
浙公网安备 33010602011771号