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

相关推荐
rockey6279 小时前
AScript之LINQ扩展
c#·.net·script·动态脚本
码农小河6610 小时前
基于SSM+JSP的高校专业信息管理系统【附源码+数据库】
java·开发语言·数据库
风若飞12 小时前
Spring Ai 入门遇到问题1
java·后端·spring
Nuanyt12 小时前
LeetCode Hot 100 链表专题(五)· 2 题(Java)
java·算法·leetcode·链表
黑马程序员毕设13 小时前
基于 Java 的餐饮点餐系统设计与应用报告
java·开发语言
SL_staff13 小时前
从文档工具到知识中枢:基于JVS数字底座构建企业级统一内容管理平台的技术实践
java·开源·全栈
SL_staff13 小时前
从‘连得上’到‘管得好’:JVS-IOT双引擎驱动设备运维闭环
java·物联网·产品
1-1=015 小时前
C# 委托与事件
开发语言·c#
w_zero_one15 小时前
递归算法(一)
java·开发语言·算法
SL_staff16 小时前
私有化低代码不是减配版开发:JVS双模式建模如何重建IT交付信任
java·低代码·spring cloud