java 根据模板导出word文档
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格式即可
记录一些代码和问题处理方式,需要参考的请谨慎。