java 根据模板导出word文档

发布时间 2023-08-30 10:55:04作者: 五官一体即忢

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) 这种格式进行存储(网上有说选择Word 2003 Xml(*.xml)也行,本人没测试成功!不知道方法,哈哈)

 


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

删除前的样式如下:

 


删除后的样式保存格式如下—第二步有重点强调:

 

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


————————————————
版权声明:本文为CSDN博主「yihuaiyan」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/yihuaiyan/article/details/87965887