1.Maven依赖
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-base</artifactId>
<version>4.4.0</version>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-web</artifactId>
<version>4.4.0</version>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-annotation</artifactId>
<version>4.4.0</version>
</dependency>
2.编写一个工具类
public class CsvUtils {
/**
* 导入Csv模板
* @param file 导入的文件
* @param clazz 类型
* @throws Exception 导入异常
*/
public static <T> List<T> importCsv(MultipartFile file,Class<T> clazz) throws Exception {
return importCsv(file,0,1,clazz);
}
/**
* 导入Csv模板
* @param file 导入的文件
* @param titleRow 标题行数
* @param headerRow 头部行数
* @param clazz 类型
* @throws Exception 导入异常
*/
public static <T> List<T> importCsv(MultipartFile file,Integer titleRow,Integer headerRow,Class<T> clazz) throws Exception {
CsvImportParams params = new CsvImportParams();
params.setTitleRows(titleRow);
params.setHeadRows(headerRow);
params.setEncoding("GBK");
return importCsv(params,file, clazz);
}
/**
*
* @param params 导入参数设置
* @param file 导入文件
* @param clazz 类对象
* @throws Exception 导入异常
*/
public static <T> List<T> importCsv(CsvImportParams params, MultipartFile file, Class<T> clazz) throws Exception {
return CsvImportUtil.importCsv(file.getInputStream(), clazz, params);
}
}
3.实体类
这里使用的注解就和导入Excel时的一摸一样,不需要做什么特殊处理
@Data
@TableName(value ="jy_device_switch_power_system_info")
@ExcelTarget("jyDeviceSwitchPowerSystemInfo")
public class JyDeviceSwitchPowerSystemInfo implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(type = IdType.AUTO)
private Long id;
@Excel(name = "设备名称(上报)",isImportField = "true")
private String deviceName;
@Excel(name = "设备ID")
private String deviceId;
@Excel(name = "站点ID")
private String deviceStationId;
@Excel(name = "资源标识(集团)")
private String deviceResourceIdentification;
@Excel(name = "所属地市")
private String deviceBelongCity;
@Excel(name = "所属区县")
private String deviceBelongCounty;
@Excel(name = "所属位置点")
private String deviceBelongPosition;
@Excel(name = "所属机房(集团)")
private String deviceRoomName;
@Excel(name = "系统类型(集团)")
private String deviceCategoryName;
@Excel(name = "创建时间")
private Date createTime;
}
4.导入
public class ImportController {
@PostMapping("/import")
@ApiOperation("导入数据")
public AjaxResult<?> bbu(@RequestPart("file")MultipartFile file){
try {
List<JyDeviceSwitchPowerSystemInfo> jyDeviceSwitchPowerSystemInfos = CsvUtils.importCsv(file, JyDeviceSwitchPowerSystemInfo.class);
jyDeviceSwitchPowerSystemInfos.forEach(System.out::println);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
遇到的问题:
我在这里写导入的时候,遇到了一个我百思不得其解的问题,导入的数据行数是对的,但是所有的数据都是null,网上搜了一下,根本搜不到解决方案,于是下载源码一步一步调试,终于发现问题,发现CSV的表头导入的时候全部乱码了,和注解里的文字注释根本对应不上,所以导入的数据全部是null
各位如果也出现类型的情况,用notepad打开你的文件,看看你的文件编码是什么,这里设置一下,再导入就好了。