java根据模板导出word

java根据模板导出word

日常开发中,常常会遇到各种各样的表格进行导出,比较好的办法就是提前弄好word模版,再通过遍历的方式进行导出文档

1、制作word模版

模版编写 内容替换

目标下面模版进行多页展示

将word转换成xml

将xml格式化 再将xml改成ftl

xml格式化地址

list找到起始位置和结束位置

起始位置插入<#list list as l>

结束位置插入</#list>

2、java代码

pom 复制代码
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.28</version>
        </dependency>

ExportWordFtl.java

java 复制代码
package com.liuhm.utils;

import freemarker.template.Configuration;
import freemarker.template.Template;
import org.junit.platform.commons.util.StringUtils;

import java.io.*;
import java.text.SimpleDateFormat;
import java.util.*;

/**
 *  
 *  @ClassName:ExportWordFtl
 *  @Description: TODO
 *  @Author: liuhaomin
 *  @Date: 2023/7/21 16:02
 */
public class ExportWordFtl {
    /**
     * 生成word文件
     * @param dataMap word中需要展示的动态数据,用map集合来保存
     * @param templateName word模板名称,例如:test.ftl
     * @param filePath 文件生成的目标路径,例如:D:/wordFile/
     * @param fileName 生成的文件名称,例如:test.doc
     */
    @SuppressWarnings("unchecked")
    public static File createWord(Map dataMap, String templateName, String filePath, String fileName){
        try {
            //创建配置实例
            Configuration configuration = new Configuration();
            //设置编码
            configuration.setDefaultEncoding("UTF-8");

            //ftl模板文件
            configuration.setClassForTemplateLoading(ExportWordFtl.class,"/");

            //获取模板
            Template template = configuration.getTemplate(templateName);

            //输出文件
            File outFile ;
            if(StringUtils.isBlank(filePath)){
                outFile = new File(fileName);
            }else {
                outFile = new File(filePath+ File.separator+fileName);
                //如果输出目标文件夹不存在,则创建
                if (!outFile.getParentFile().exists()){
                    outFile.getParentFile().mkdirs();
                }
            }

            //将模板和数据模型合并生成文件
            Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile),"UTF-8"));

            //生成文件
            template.process(dataMap, out);

            //关闭流
            out.flush();
            out.close();
            return outFile;
        } catch (Exception e) {
            e.printStackTrace();

        }
        return null;
    }
    public static void main(String[] args) {
        List<Map<String, Object>> list = new ArrayList<>();
        for (int i = 0; i <10 ; i++) {
            Map<String, Object> map = new HashMap<>();
            map.put("datasubmit_updated_time","2023-07-02 12:12:12");
            Date date = new Date();
            map.put("nyliq",date);
            map.put("yhorq","单位名称"+i);
            map.put("xiikv","隐患类型"+i);
            map.put("kuzjg","隐患整改通知书类型"+i);
            map.put("hnvld","隐患详情"+i);
            map.put("gnbcv",date);
            map.put("malio",date);
            map.put("skpfm","整改情况告知书编号"+i);
            map.put("vgnje","整改状态"+i);
            map.put("vutap","备注"+i);
            list.add(map);
        }
        Map<String,Object> dataMap = new HashMap<String, Object>();
        dataMap.put("list", list);

        try {
            String path = "C:\\Users\\Administrator\\Desktop\\";
//            path = URLDecoder.decode(Test.class.getClassLoader().getResource("").getPath(), "UTF8");
            File file = ExportWordFtl.createWord(dataMap, "template/demo.ftl", path, "demo-t.doc");
            System.out.println("文档生成成功,路径为" + file.getAbsolutePath() );
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

测试

执行main方法

生成文件

所有的文件格式正确

博客地址

代码下载

下面的export-template-word

相关推荐
陈大爷(有低保)17 分钟前
UDP Socket聊天室(Java)
java·网络协议·udp
kinlon.liu31 分钟前
零信任安全架构--持续验证
java·安全·安全架构·mfa·持续验证
王哲晓1 小时前
Linux通过yum安装Docker
java·linux·docker
java6666688881 小时前
如何在Java中实现高效的对象映射:Dozer与MapStruct的比较与优化
java·开发语言
Violet永存1 小时前
源码分析:LinkedList
java·开发语言
执键行天涯1 小时前
【经验帖】JAVA中同方法,两次调用Mybatis,一次更新,一次查询,同一事务,第一次修改对第二次的可见性如何
java·数据库·mybatis
Jarlen1 小时前
将本地离线Jar包上传到Maven远程私库上,供项目编译使用
java·maven·jar
friklogff1 小时前
【无标题】云端之C#:全面解析6种云服务提供商的SDK
开发语言·flask·c#
蓑 羽1 小时前
力扣438 找到字符串中所有字母异位词 Java版本
java·算法·leetcode
Reese_Cool1 小时前
【C语言二级考试】循环结构设计
android·java·c语言·开发语言