使用easyexcel进行Excel导入导出遇到的各种问题汇总

SpringMVC接口定义问题:

@Api("导出")
@RequestMapping("/")
public interface ExcelImportExport {
          
   
    @GetMapping("export/inspection_table")
    @ApiOperation(value = "导出点检表")
    //public AMMSResponse exportInspectionTableExcel(@RequestParam List<InspectionTableDTO> inspectionTableDTOList, HttpServletResponse response) throws AMMSException, IOException;
    public AMMSResponse exportInspectionTableExcel(@RequestParam List<Long> idList, HttpServletResponse response) throws AMMSException, IOException;
}

注意这里定义时没写@RequestParam会报错:

java.lang.NoSuchMethodException: java.util.List.<init>()
以及 No primary or default constructor found for interface java.util.List

参考 报错原因: 对象在初始化时没有找到对应的构造方法,从而导致对象初始化失败。

解决方法: 提供相应的构造方法即可,如示例接口,有两种处理方法。 方法一,参数前加@RequestParam:

@GetMapping("sample")
public void sample(@RequestParam List<Integer> ids){
          
   
	...
}

方法二,参数封装到对象中:

@GetMapping("sample")
public void sample(Sample sample){
          
   
	List<Integer> ids = sample.getIds();
	...
}

private static class Sample{
          
   
	private List<Integer> ids;
	...
	// getter setter...	
}

导出excel时,使用GetMapping获取前端数据,参考,是无法获取多个DTO的,最多只能获取一个DTO,因此若用要获取多个DTO可以获取DTO的id的列表,进而从数据库获取DO,转换为DTO。

Instant转换为String时,需要指定时区和位置等信息:

DateTimeFormatter.ofPattern("yyyyMMddHHmmss")
                                .withZone(ZoneId.systemDefault())
                                .withLocale(Locale.CHINA )
                                .format(Instant.now())).toString()

参考:

经验分享 程序员 微信小程序 职场和发展