EasyExcel导出当中的坑

503 阅读1分钟

复杂表头导出踩中的坑

  复杂表头导出,本人采用模板填充的方式

excel模板:

image.png

excel导出的结果:

image.png

代码示例

//获取当前时间
public class excelTest{
    // 模板注意 用{} 来表示你要用的变量 如果本来就有"{","}" 特殊字符 用"\{","\}"代替
    // {} 代表普通变量 {.} 代表是list的变量
    public String getDate(){
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
        String date = sdf.format(new Date());
        return date;
    }

    //生成文件名
    public String getFileName(String targetPath){
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
        String date = sdf.format(new Date());
        String fileName = date + UUID.randomUUID().toString().replace("-", "");
        String fileNameUrl = targetPath + File.separator + fileName + ".xlsx";
        return fileNameUrl;
    }

    //获取excel模板路径 这种方式在linux中打成jar包,是获取不到的,需要进一步处理
    public String getTemplatePath(){
        String path = excelTest.class.getResource("/").getPath();
        //代表该模板在resources包下的excel包里面
        String result = path + "excel/";
        return result;
    }
    
    //获取excel模板路径 这种方式达成jar包在linux是可以直接获取到的
    publlic InputStream getTemplatePath(String templateName){
        InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream("excel/"+templateName)
    }
    

    //导出excel
    public void export(){
        //需要下载到的目标路径
        String targetPath = "D:\\file";
        //文件下载的地址
        String fileName = getFileName(targetPath);
        //模板文件名
        String templateName = "excelTemplate.xlsx";
        //模板的地址
        //String templatePath = getTemplatePath() + templateName;
        InputStream templatePath = getTemplatePath(templateName);
        //模板中显示的地址当前时间
        Map<String, Object> data = new HashMap();
        data.put("date", getDate());
        
        ExcelWriter excelWriter = EasyExcel.write(fileName).withTemplate(templatePath).build();
        /**
         * 注意:如果sheet传值了,就会报空指针,因此不要传值,sheet名,在模板中命名
         * WriteSheet writeSheet = EasyExcel.writerSheet("用户表").build();
         */
        WriteSheet writeSheet = EasyExcel.writerSheet().build();
        //导出时间
        excelWriter.fill(data, writeSheet);
        List<User> list = UserMapper.queryUserAll();
        //导出数据
        excelWriter.fill(list, writeSheet);
        //关闭流
        excelWriter.finsh();
    }
}

@Data
public class User{
    private String name;
    private String sex;
    private String Address;
}