FreeMarker导出复杂Excel
最近业务需要做复杂的Excel导出功能,由于Execl样式复杂,本来想做基于标签占位符的导出,由于时间有限,没有时间预言和写demo,最后还是选择了基于POI的导出,就是样式复杂了点。
现在有时间研究了一下使用freemarker导出复杂的excel表格(word也是可以的)。
一、首先根据最终需要导出的excel表格的格式,用假数据填充后生成一个excel模板。
例如下面使我们要导出的人员信息。
二、Execl另存为.xml文件
如果报以下错误
请选择
三、通过Freemarker进行xml文件编辑
四、Java代码开发
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.29</version>
</dependency>
实体类:
public class UserInfo {
private String username;
private Integer age;
private String phone;
private String sex;
private String address;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
核心代码
public static void main(String[] args) throws IOException, TemplateException {
Configuration config = new Configuration(Configuration.VERSION_2_3_0);
//模板所在文件夹
config.setDirectoryForTemplateLoading(new File("D:/execltest"));
config.setObjectWrapper(new DefaultObjectWrapper(Configuration.VERSION_2_3_0));
//模板名称
Template template = config.getTemplate("name2.xml");
FileOutputStream fileOutputStream = new FileOutputStream("D:/execltest/name.xls");
OutputStreamWriter out = new OutputStreamWriter(fileOutputStream, StandardCharsets.UTF_8);
List<UserInfo> list = Lists.newArrayListWithCapacity(5);
for (int i = 0; i < 5; i++) {
UserInfo userInfo = new UserInfo();
userInfo.setUsername("张三" + i);
userInfo.setAge(22 + i);
userInfo.setPhone("15094037899");
userInfo.setSex("男");
userInfo.setAddress("北京");
list.add(userInfo);
}
Map<String, Object> map = Maps.newHashMap();
map.put("personList",list);
template.process(map,out);
}
五.效果
遇到的问题:
我是用wps生成的xml,最后生成的excel,在office excel打开,报如下错误,但是用wps打开是没问题的,可能是兼容性问题:
但是点击也是能打开的。这个问题用office excel生成xml进行验证,还是报上面的错误,网上的方法都试了没用。
打开excel文件,会出现上面的弹框,这个问题一直不好解决,因为我们生成的是xml标记语言,只是将后缀改为xls显示而已,但实际上不是xls文件,如果有好的解决方案(不是修改注册表的掩耳盗铃的方式),期待留言!
导出word也是提示上面错误
六:建议
excel右键导出xml(最好利用excel microsoft导出,不要用wps导出xml,因为microsoft导出的xml格式简单)
ss:ExpandedRowCount="3" wps可以不改,microsoft设置越大越好(例如999999),或者用freemarker来传值,不能小于实际行数
excel(最好导出的格式都是.xls,不要生成.xlsx,踩过坑的都知道,由xml生成的xlsx microsoft打不开)
word(最好导出的格式是.doc,不要生成.docx)
参考来自: https://blog.csdn.net/m0_38106299/article/details/80830161
微信公众号