通过easypoi实现数据导入,便于下次快速使用
引入maven依赖
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-spring-boot-starter</artifactId>
<version>4.1.2</version>
</dependency>
实体对象
@ApiModel("仪表导入模板对象")
@Data
public class EnergyMeterModel implements Serializable {
@ColumnWidth(20)
@ExcelProperty(value = "系统名称", index = 0)
@ApiModelProperty(value = "系统名称")
private String nodeName;
@ColumnWidth(20)
@ExcelProperty(value = "设备名称",index = 1)
@ApiModelProperty(value = "设备名称")
private String deviceName;
@ColumnWidth(20)
@ExcelProperty(value = "设备ID", index = 2)
@ApiModelProperty(value = "设备ID")
private String deviceSn;
@ColumnWidth(30)
@ExcelProperty(value = "位置", index = 3)
@ApiModelProperty(value = "位置")
private String position;
@ColumnWidth(30)
@ExcelProperty(value = "标签", index = 4)
@ApiModelProperty(value = "标签")
private String tagNames;
}
导入模板下载
@ApiOperation(value = "模板下载")
@GetMapping("getMeterTemplate")
public void getMeterTemplate(HttpServletResponse response) {
try {
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setCharacterEncoding(StringPool.UTF_8);
// 这里URLEncoder.encode可以防止中文乱码
String fileName = URLEncoder.encode("xx模板", StringPool.UTF_8);
response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
ArrayList<EnergyMeterModel> demoList = new ArrayList<>();
EnergyMeterModel energyMeterModel = new EnergyMeterModel();
energyMeterModel.setDeviceSn("00000009");
energyMeterModel.setDeviceName("智能水表x");
energyMeterModel.setNodeName("架构x");
energyMeterModel.setTagNames("xxxx");
energyMeterModel.setPosition("xxx");
demoList.add(energyMeterModel);
EasyExcelFactory.write(response.getOutputStream(), EnergyMeterModel.class).sheet("sheet0").doWrite(demoList);
} catch (Exception e) {
e.printStackTrace();
}
}
导入controller层
@ApiOperation(value = "导入")
@PostMapping("/import")
public Result<?> downloadWithPanel(@RequestParam("excel") MultipartFile file) {
try {
// 验证上传文件的格式
String filename = file.getOriginalFilename();
String excelType = null;
if (StringUtils.isNotEmpty(filename)) {
excelType = filename.substring(filename.lastIndexOf(StringPool.DOT));
}
MeterTreeDeviceReadListener<EnergyMeterModel> listener = new MeterTreeDeviceReadListener<EnergyMeterModel>();
ExcelTypeEnum excelTypeEnum = ExcelTypeEnum.XLS;
if (ExcelTypeEnum.XLSX.getValue().equals(excelType)) {
excelTypeEnum = ExcelTypeEnum.XLSX;
}
EasyExcelFactory.read(file.getInputStream(), EnergyMeterModel.class, listener).excelType(excelTypeEnum).sheet().doRead();
List<EnergyMeterModel> list = listener.getList();
//调用导入逻辑
energyMeterTreeService.doImport(list);
return Result.success();
} catch (BusinessException | IOException e) {
e.printStackTrace();
ReturnEnum returnEnum = ReturnEnum.MSG_ERROR_1;
returnEnum.setValue(e.getMessage());
return Result.fail(returnEnum);
}
}