如需转载分享,请标明出处,且不用于盈利为目的,谢谢合作!
将集合数据导出到Word文件
1.新建word文档,创建表格输入内容,并另存为xml格式的文件
2.编辑xml文件:在<w:tr></w:tr>外面嵌套 <#list lists as tmp></#list>,一定要是${tmp.name}所在的这行,并保存为ftl格式文件,将ftl文件放到项目的resources目录下
3.添加pom.xml依赖
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!--freemarker依赖-->
<dependency>
<groupId>freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.6</version>
</dependency>
4.新建类DataToWord.java
package com.yss.file.filedown.util;
import freemarker.template.Configuration;
import freemarker.template.Template;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class DataToWord {
@Data
@AllArgsConstructor
@NoArgsConstructor
public static class Student {
String name;
int age;
String sex;
}
public static void createWord(String src, String ftl) {
System.out.println("数据加载...");
Map<String, Object> dataMap = new HashMap<String, Object>();
List<Student> list = new ArrayList<>();
Student s1 = new Student("张三", 22, "男");
Student s2 = new Student("李四", 22, "男");
Student s3 = new Student("王五", 22, "男");
Student s4 = new Student("赵敏", 22, "女");
Student s5 = new Student("张无忌", 22, "男");
list.add(s1);
list.add(s2);
list.add(s3);
list.add(s4);
list.add(s5);
List<Map<String, Object>> newsList = new ArrayList<Map<String, Object>>();
list.forEach(o -> {
Map<String, Object> map = new HashMap<String, Object>();
map.put("name", o.getName());
map.put("age", o.getAge());
map.put("sex", o.getSex());
newsList.add(map);
});
dataMap.put("lists", newsList);
System.out.println("数据加载完成...");
Writer out = null;
try {
// 创建配置实例
Configuration configuration = new Configuration();
// 设置编码
configuration.setDefaultEncoding("UTF-8");
// ftl模板文件
configuration.setClassForTemplateLoading(DataToWord.class,
"/");
// 获取模板
Template template = configuration.getTemplate(ftl);
// 输出文件
File outFile = new File(src);
// 如果输出目标文件夹不存在,则创建
if (!outFile.getParentFile().exists()) {
outFile.getParentFile().mkdirs();
}
// 将模板和数据模型合并生成文件
out = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(outFile), "UTF-8"));
// 生成文件
template.process(dataMap, out);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (out != null) {
try {
out.flush();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
public static void main(String[] args) {
createWord("d:/datatoword.doc", "muban.ftl");
}
}
5.结果数据