导出最多的就是Excel了,头一次碰到导出Word,心里那个懵,现在献上具体的导出方法及步骤!

第一步:首先拿到Word模板,你就会想用什么方法来实现?如图所示:

把要填写的内容区域用${}来进行插值操作,不要以为这样写就可以了,那你就太天真了!

比如第一个:${QYMC},这些都是英文状态下的字符,因为Word模板是有固定格式的,那么你在生成xml文件时,最后把xml文件的内容复制到后缀名为.ftl的文件里,生成的格式就会出现问题,问题描述是:${QYMC 与 }是分开的状态,这样你在获值塞进去 的时候就会报错!正确的代码格式如下:

<w:r w:rsidRPr="0048700A"><w:rPr><w:rFonts w:ascii="Times New Roman" w:hAnsi="Times New Roman"/><w:color w:val="333333"/><w:kern w:val="0"/><w:szCs w:val="21"/></w:rPr><w:t>${QYMC}</w:t>
</w:r>

关键步骤:把Word中所有的插值如${QYMC}必须要:::剪切---->粘贴(至文本文档txt中,为啥是这个里面,那是因为txt文本是无格式的)!操作顺序如下:Ctrl+X,Ctrl+V,Ctrl+S,Ctrl+A,Ctrl+X,Ctrl+V。头尾两个操作是在Word模板中操作,中间全部是在txt文本文档中操作!

只有按照上述步骤操作,你生成的代码内容,插值字段是一个整体的,不会是拆散的(拆散的就会导致对应的值插不到对应的位置或者导出Word直接报错)!

大家就会想:怎么生成代码???

Word 对应的字段全部填充好时,最后直接把Word重命名,重命名的文件后缀是.xml文件,打开xml文件把里面生成好的代码全部复制要粘贴到一个后缀是.ftl的文件中,这个ftl文件是在你开发的环境中新建一个空文件,命名方式是**.ftl。。。

这才是模板最终要的环节,如果模板生成的代码格式全部乱了,直接导致你插入的值获取不到,导出Word操作直接报错!!!!

第二步:那就是后端的代码实现!!

@BLH("XjrExitWordBLH")
@Mapping("/XjrExitWordBLH")
public class XjrExitWordBLH {@ResourceIExportWordService exportWordService;@Mapping("/getData")public IZrarResponse getData(IZrarRequest req) throws Exception {IZrarResponse res = new ZrarResponse();Map dataMap = new HashMap();//获取idString id = req.getParameter("id");ZxqyXjrqysqVO vo = exportWordService.getVo(id);dataMap.put("QYMC", vo.getQymc()); //企业名称dataMap.put("SZSFMC", vo.getSzsfmc()); //所在省份dataMap.put("TXDZ", vo.getTxdz()); //所在省份dataMap.put("YB", vo.getYb()); //所在省份dataMap.put("FDDBR", vo.getFddbr()); //所在省份dataMap.put("FDDBRDH", vo.getFddbrdh()); //所在省份dataMap.put("FDDBRSJ", vo.getFddbrsj()); //所在省份dataMap.put("LXR", vo.getLxr()); //所在省份dataMap.put("LXRDH", vo.getLxrdh()); //所在省份dataMap.put("LXRSJ", vo.getLxrsj()); //所在省份dataMap.put("CZ", vo.getCz());//传真dataMap.put("EMAIL", vo.getEmail());//E-MaildataMap.put("ZCSJ", vo.getZcsj());//注册时间dataMap.put("ZCZB", vo.getZczb());//注册资本dataMap.put("TYSHXYDM", vo.getTyshxydm());//统一社会信用代码File file = exitWord(req.getRealPath("\\"), "ftl", "exportWordFtl", "导出Word模板", dataMap);res.addStream(file,"导出Word模板.doc");// file 文件对象,fileName 下载时所提示文件名称return res;}

下面的方法就是导出Word的模板方法,这个方法很重要,请好好分析下!!

 /*** ftl类型文件导出word模板方法** @param realPath* @param path* @param ftlName* @param docAsName* @param dataMap* @return*/public static File exitWord(String realPath, String path, String ftlName, String docAsName, Map<String, Object> dataMap) {Configuration config = new Configuration();File file = null;Writer out = null;try {if (!path.startsWith("/")) {path += "/";}if (!path.endsWith("/")) {path = path + "/";}//realPath = req.getRealPath("\\") + "WEB-INF";realPath = realPath + path;realPath = realPath.replace("\\", "/");config.setDirectoryForTemplateLoading(new File(realPath));config.setDefaultEncoding("UTF-8");config.setObjectWrapper(new DefaultObjectWrapper());Template template = config.getTemplate(ftlName + ".ftl", "UTF-8");//ftl转doc文书保存的地址//String dir = PropertyManager.getProperty("CommonUploadFileUrl");String dir = PropertyManager.getProperty("CommonUploadFileUrl", new String[0]);dir = dir.replace("\\", "/");if (dir.lastIndexOf("/") == dir.length() - 1) {dir = dir + "temp/";} else {dir = dir + "/temp/";}File folder = new File(dir);if ((folder.exists()) || (folder.mkdirs())) {file = new File(folder, docAsName + ".doc");file.createNewFile();}out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), "UTF-8"));template.process(dataMap, out);out.flush();} catch (Exception e) {e.printStackTrace();} finally {try {if (out != null) {out.close();}} catch (IOException e) {e.printStackTrace();}}return file;}

一个是塞数据的方法,另一个就是导出Word的方法!细心的朋友会发现,里面使用了接口来实现!接口方法如下:

public interface IExportWordService {ZxqyXjrqysqVO getVo(String id) throws Exception;}
@Service("exportWordService")
public class ExportWordService implements IExportWordService {@Resourceprivate IBaseZrarDao dao;@Overridepublic ZxqyXjrqysqVO getVo(String id) {String sql = "select QYMC,SZSFMC,TXDZ,YB,FDDBR,FDDBRDH,FDDBRSJ,LXR,LXRDH,LXRSJ,CZ,EMAIL,ZCSJ,ZCZB,TYSHXYDM"+"from ZXQY_ZJTXXJR where id = ?";ZxqyXjrqysqVO vo = dao.getBean(sql, ZxqyXjrqysqVO.class, id);return vo;}}

接口的方法就是为了查询出所有使用的字段数据,返回的结果就是一个VO,VO的作用大家都很清楚那就是拿来塞值的。

导出Word遇到的坑及解决方法(一)!相关推荐

  1. Mysql5.7数据导出提示--secure-file-priv选项问题的解决方法

    Mysql5.7数据导出提示--secure-file-priv选项问题的解决方法 参考文章: (1)Mysql5.7数据导出提示--secure-file-priv选项问题的解决方法 (2)http ...

  2. CocoaPods更新过程中出现的坑及解决方法

    CocoaPods更新过程中出现的坑及解决方法 参考文章: (1)CocoaPods更新过程中出现的坑及解决方法 (2)https://www.cnblogs.com/hero11223/p/1071 ...

  3. ubuntu16.04安装CUDA 8.0(很详尽,包括一些坑的解决方法)

    ubuntu16.04安装CUDA 8.0(很详尽,包括一些坑的解决方法) 参考文章: (1)ubuntu16.04安装CUDA 8.0(很详尽,包括一些坑的解决方法) (2)https://www. ...

  4. MySQL导出数据遇到secure-file-priv问题的解决方法

    这篇文章主要为大家详细介绍了MySQL导出数据遇到secure-file-priv问题的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 ERROR 1290 (HY000): The My ...

  5. mysqlcsv导入中文乱码_Mysql 导入导出csv 中文乱码问题的解决方法

    导入csv: 复制代码 代码如下: load data infile '/test.csv' into table table_name fields terminated by ','  optio ...

  6. mysql5.7.20 sql mode_MySQL5.7中的sql_mode默认值带来的坑及解决方法

    在正常项目开发过程中,如果MySQL版本从5.6升级到5.7版本.作为DBA在考虑数据库版本升级带来的影响时,一般会有几个注意点: sql_mode optimizer_switch 本文主要内容是M ...

  7. Mybatis的逆向工程,MySQL8的数据库,8.0.11驱动的逆向工程的坑的解决方法

    Mybatis的逆向工程,MySQL8的数据库,8.0.11驱动的逆向工程的坑的解决方法 参考文章: (1)Mybatis的逆向工程,MySQL8的数据库,8.0.11驱动的逆向工程的坑的解决方法 ( ...

  8. PHP导出CSV文件出现乱码的解决方法

    PHP导出CSV文件出现乱码的解决方法 参考文章: (1)PHP导出CSV文件出现乱码的解决方法 (2)https://www.cnblogs.com/xingxia/p/php_csv.html 备 ...

  9. [转]html导出到excel数据格式不正确解决方法

    [转]html导出到excel数据格式不正确解决方法 参考文章: (1)[转]html导出到excel数据格式不正确解决方法 (2)https://www.cnblogs.com/zhangxin44 ...

最新文章

  1. 抽屉效果的实现(DrawerLayout和SlidingMenu的对比)
  2. 【Linux】一步一步学Linux——tr命令(55)
  3. xhtml标签和html标签,XHTML常用标签
  4. 问题十:【总结】解决了问题四~问题九,vec3这个类的代码应该都能看懂了
  5. java 悬浮提示框_弹出提示框的方式——java
  6. oracle plsql存储过程中out模式参数的用法
  7. [源]云计算技术堆栈系列——鸟瞰
  8. 全自动与半自动手表的区别_半自动和全自动的区别在哪里?
  9. java numberformat 方法_java.text.NumberFormat使用方法
  10. 创意PS:-----程序员变身超人
  11. nw.js html5,nw.js 如何使用?
  12. python批量生成经纬度坐标查询_用Python评测三种批量查询经纬度的方法,你pick哪一种?...
  13. 【对讲机的那点事】对讲机电池、充电器使用说明须知
  14. python 豆瓣电影top250_python 爬豆瓣电影top250
  15. ELF文件——DWARF源码解析
  16. [FPGA]1 MRCC与SRCC学习
  17. springboot集成Lean Cloud 及时通讯
  18. Happyclass 完美破解极域,学生机房管理助手密码及限制!
  19. Android 手机应用开发经验 之 通过Socket(TCP/IP)与PC通讯
  20. Android新荣耀手机角标只增不减

热门文章

  1. docker编译的时候出现ls: cannot access /code/ibg_fund/fund-common/src/main/java/com/ibg/fund/channel/client/
  2. day01 js基础
  3. 太厉害了,用 CSS 实现一只自由飞翔的鸟儿
  4. 用html做一个双十一宣传网页,17年双十一总结|网页|电商|fly19891116- 原创作品 - 站酷 (ZCOOL)...
  5. 智能家居实训第六天 音频 视频播放器
  6. java左-右移运算符
  7. 计算机系统异常检测修复,如何修复计算机崩溃问题
  8. 凸多边形的划分——区间DP
  9. 微信测试公众号 接口配置信息
  10. 如何解决微信测试公众号配置失败的问题