java 根据模板导出word文档

private-logs / 2023-08-30 / 原文

1、引入包

        <!--freemarker word-->
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.28</version>
        </dependency>

2、代码示例片段

 //region 把数据放进这个map里面进行填充
            Map<String,Object> dataMap = new HashMap();
            dataMap.put("ProjectName",PROJECT_NAME);
            dataMap.put("OpenAddress",OPEN_ADDRESS);
            dataMap.put("PROJECT_CODE",PROJECT_CODE);
            dataMap.put("ExtractTime",ExtractTime);
            dataMap.put("AgentUnit",AgentUnit);
            dataMap.put("type",type);
            dataMap.put("OPEN_TIME",OPEN_TIME);
            dataMap.put("OwnerUnit",OwnerUnit);
            dataMap.put("Notice_type",Notice_type);
            dataMap.put("Budget",Budget);
            dataMap.put("Is_Allowed_Extract_Same_Unit",Is_Allowed_Extract_Same_Unit);
            dataMap.put("TemporaryExpertList",dt_TemporaryExpert);
            dataMap.put("TemporaryExpertJoinList",dt_join);
            dataMap.put("TemporaryExpertNotJoinList",dt_Notjoin);
            //endregion


            //region 导出模板文件 参考 https://blog.csdn.net/yihuaiyan/article/details/87965887
            //创建模板配置
            Configuration configuration = new Configuration();
            configuration.setDefaultEncoding("utf-8");
            //模板文件的位置
            String systemDir = System.getProperty("user.dir");
            String sourcePath = systemDir + "\\staticfile";
            configuration.setDirectoryForTemplateLoading(new File(sourcePath));
            Template template = configuration.getTemplate("临时专家库抽取结果信息.ftl");   //加载---要装载的模板文件
            //输出文档路径及名称,注意后缀一定要.doc!不然代码运行完后会打不开
            String fileName = LocalDateTimeUtils.convert(LocalDateTime.now(),"yyyyMMddHHmmss") + ".doc";
            String path = systemDir + basePath + "/临时专家"+ fileName;
            File outFile = new File(path);
            if (!outFile.getParentFile().exists()) {
                outFile.getParentFile().mkdirs();
            }
            //写入模板
            Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile)));
            template.process(dataMap, out);

            //导出并删除本地文件
            out.close();
            DownLoadFileUtil.downloadFile(response,path,fileName,true);
            //endregion

3、文件处理

第一步:先准备好一个模板,我使用的是比较复杂的模板,浪费了很多时间(建议各位大神制作一个简单的模板测试即可)

 

第二步:替换好了之后选择一个存储目录另存为 选择 WordXml 文档(*.xml) 这种格式进行存储

 

 


第三步:找到刚刚你存储的目录,以notepad++打开,刚才存储的.xml文件,*(最好格式化样式,不然很难找)删掉一些不必要的多余代码。

 

第四部,关于多行动态列表的处理

 

 

**最后:把改好的xml文档后缀修改成.ftl格式即可