Spring Boot 导出Word文档(一)

507 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

有一个需求 就是把查出来的数据给放到一个word文档里 ,而怎么实现呢 我查阅了许多资料 发现了一个比较简单和方便的方法 写一个小demo出来

首先这个项目是用了freemarker依赖来实现,首先先做准备工作 先创建一个项目来导入依赖

      <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
        </dependency>

然后还需要一个ftl文件

image.png

是不是看着比较头疼 其实这个文件是通过word文档转化出来的,我们先设计好或者找到需要的文档

image.png

然后把我们想要取代数据的位置给用这种格式取代peopleid,其中peopleid是你拿到的数据的属性名,而我们要把三打哈{peopleid},其中peopleid是你拿到的数据的属性名,而我们要把**三打哈**用{peopleid}取代

image.png

这样我们就可以把数据给到三打哈之前的位置了

而我们怎么得到我们想要的ftl模板文件呢 这就很简单了 我们直接修改我们修改过的文档的后缀名 让它类型为ftl

image.png

这样就得到一个ftl文件了

然后怎么使用这个东西呢 我们需要创建一个工具类 来对文档进行赋值并生成字节流去导出

首先是对文档进行赋值,参数有我们需要赋值的数据和模板文件

   private static File createDoc(Map<?, ?> dataMap, Template template) {
        String name = "sellPlan.doc";
        File f = new File(name);
        Template t = template;
        try {
            // 这个地方不能使用FileWriter因为需要指定编码类型否则生成的Word文档会因为有无法识别的编码而无法打开
            Writer w = new OutputStreamWriter(new FileOutputStream(f), "utf-8");
            t.process(dataMap, w);
            w.close();
        } catch (Exception ex) {
            ex.printStackTrace();
            throw new RuntimeException(ex);
        }
        return f;
    }

而下一步是使用上面的代码生成导出字节流

具体 请看下一篇文章