用easypoi遇到了一些问题,然后该用freemarker
我是使用的springboot集成的!
先看一下我的模板有多么复杂
先说一下步骤
1.先导入freemarker的依赖
<!--freemarker start-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
<dependency>
<groupId>freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.8</version>
</dependency>
<!--freemarker end-->
2.将你的模板文件添加相应的字段
然后另存为xml格式,然后利用xml格式化工具将其格式化,你就会得到如下的
解释一下这里的数据,一个list就是你后台请求数据返回的一个list,然后这样写语法,freemarker就会遍历,有多条,循环出来的就是多条数据
这是正确的,你需要判空,需要加!,这都是freemarker的语法,这里贴一个freemarker的模板语法网址freemarker模板网址
然后我就直接贴后台代码了
/** 数据类型为{@value} .*/
public static final String UTF_8 = "UTF-8";
/**
* 构造方法.
*/
private FreemarkerExcelUtil() {
}
/**
* @param dataMap 传入的数据
* @param valueName 存储名
* @return file
*/
public static byte[] createExcel(final Map<?, ?> dataMap,
final String valueName) throws IOException, TemplateException {
final Configuration configuration = new Configuration(Configuration.DEFAULT_INCOMPATIBLE_IMPROVEMENTS);
configuration.setDefaultEncoding(UTF_8);
configuration.setClassForTemplateLoading(FreemarkerExcelUtil.class, "/export-model");
final Template template = configuration.getTemplate(valueName);
final ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
final Writer w = new OutputStreamWriter(outputStream, UTF_8);
template.process(dataMap, w);
w.close();
return outputStream.toByteArray();
}
/** 数据类型为{@value} .*/
public static final String UTF = "UTF-8";
/**
* 调用创建excel帮助类,来创建excel.
* @param request 请求
* @param response 响应
* @param dataMap 传过来的map
* @param valueName 存储名
* @param fileName 文件名
*/
@Override
public void excelUtil(final HttpServletRequest request,
final HttpServletResponse response,
final Map<?, ?> dataMap,
final String valueName,
final String fileName) throws IOException, TemplateException {
byte[] file = FreemarkerExcelUtil.createExcel(dataMap, valueName);
try (OutputStream out = response.getOutputStream();) {
request.setCharacterEncoding(UTF);
//调用创建excel帮助类,其中LeaderHomepage.ftl为模板名称 路径export-model/LeaderHomepage.ftl
response.setCharacterEncoding(UTF);
response.setContentType("application/msexcel");
response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(fileName + ".xls", UTF));
out.write(file);
out.flush();
}
}
最后贴一个模板在idea项目中存放的位置,注意是ftl格式的,你将xml加完freemarker的语法就可以改文件的后缀为.ftl了。
我之前百度的做法,传给前段的是xml,前端解析不了,做好是二进制,但是后来改成了这样。前台就可以解析了