复杂表头导出踩中的坑
复杂表头导出,本人采用模板填充的方式
excel模板:
excel导出的结果:
代码示例
//获取当前时间
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;
}