Java生成word文件

第一步:引入依赖

 <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.3.RELEASE</version>
 </parent>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-freemarker</artifactId>
    </dependency>
</dependencies>

第二步:生成工具类

在util包里生成word工具类=>WordUtils


public class WordUtils {

    /**
     * 生成 word 文档方法
     *
     * @param dataMap      要填充的数据
     * @param templateName 模版名称
     * @param fileName     要输出的文件路径
     * @throws Exception 抛出的异常
     */
    public static void generateWord(Map<String, Object> dataMap, String templateName, String fileName) throws Exception {

        // 设置FreeMarker的版本和编码格式
        Configuration configuration = new Configuration(new Version("2.3.28"));
        configuration.setDefaultEncoding("UTF-8");

        // 设置FreeMarker生成Word文档所需要的模板的路径
        // configuration.setDirectoryForTemplateLoading(new File("/Users/xxx/Desktop/"));
        // 此处把word转成的ftl模版文件都放在 resources 下的 templates文件夹中
        configuration.setClassForTemplateLoading(WordUtils.class, "/templates");

        // 设置FreeMarker生成Word文档所需要的模板
        Template tem = configuration.getTemplate(templateName, "UTF-8");
        // 创建一个Word文档的输出流
        Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File(fileName)), StandardCharsets.UTF_8));
        // FreeMarker使用Word模板和数据生成Word文档
        tem.process(dataMap, out);
        out.flush();
        out.close();
    }

第三步:制作word模板(写好word文件,转成ftl文件)

制作教程

https://jingyan.baidu.com/article/3aed632e4261a3311080919c.html

第四步:把ftl文件放入 resources 下的 templates文件夹中

第五步 :实际应用

新new一个map,存的是ftl(word文件)里需要填入从数据库里查出来的字段部分;
key是ftl文件里的${}部分,value是需要替换的数据;
例如${student1Name},工具会去map里找key为student1Name的键值对,将其对应的值替换进去;
 

//这个map存的是ftl(word文件)里需要填入从数据库里查出来的字段部分
//key是ftl文件里的${}部分,value是需要替换的数据
//例如${student1Name},工具会去map里找key为student1Name的键值对,将其对应的值替换进去
Map<String, Object> dataMap = new HashMap<>()
//例如studentList是从数据库里查出来的
List<student> studentList = new ArrayList<>();

for (int i = 0; i < studentList.size() ; i++) {
        dataMap.put("student1Name", studentList(i).getName());
        dataMap.put("student2Name", studentList(i).getName());
        dataMap.put("student3Name", studentList(i).getName());
}
//写出word文件
  WordUtils.generateWord(dataMap,"student.ftl","E:\\workSpace\\学生名称.doc");


//如果前端下载需要后端返回这个word文件,可以生成一个file路径,使用FileUtil工具返回到前端(FileUtil在另一篇)
//File file = new File("E:\\workSpace\\学生名称.doc");
//FileUtil.downloadFile(request, response,file , false);

如果前端下载需要后端返回这个word文件,可以生成一个file路径,使用FileUtil工具返回到前端(FileUtil在另一篇)

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值