导出Word遇到的坑及解决方法(一)!
导出最多的就是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遇到的坑及解决方法(一)!相关推荐
- Mysql5.7数据导出提示--secure-file-priv选项问题的解决方法
Mysql5.7数据导出提示--secure-file-priv选项问题的解决方法 参考文章: (1)Mysql5.7数据导出提示--secure-file-priv选项问题的解决方法 (2)http ...
- CocoaPods更新过程中出现的坑及解决方法
CocoaPods更新过程中出现的坑及解决方法 参考文章: (1)CocoaPods更新过程中出现的坑及解决方法 (2)https://www.cnblogs.com/hero11223/p/1071 ...
- ubuntu16.04安装CUDA 8.0(很详尽,包括一些坑的解决方法)
ubuntu16.04安装CUDA 8.0(很详尽,包括一些坑的解决方法) 参考文章: (1)ubuntu16.04安装CUDA 8.0(很详尽,包括一些坑的解决方法) (2)https://www. ...
- MySQL导出数据遇到secure-file-priv问题的解决方法
这篇文章主要为大家详细介绍了MySQL导出数据遇到secure-file-priv问题的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 ERROR 1290 (HY000): The My ...
- mysqlcsv导入中文乱码_Mysql 导入导出csv 中文乱码问题的解决方法
导入csv: 复制代码 代码如下: load data infile '/test.csv' into table table_name fields terminated by ',' optio ...
- mysql5.7.20 sql mode_MySQL5.7中的sql_mode默认值带来的坑及解决方法
在正常项目开发过程中,如果MySQL版本从5.6升级到5.7版本.作为DBA在考虑数据库版本升级带来的影响时,一般会有几个注意点: sql_mode optimizer_switch 本文主要内容是M ...
- Mybatis的逆向工程,MySQL8的数据库,8.0.11驱动的逆向工程的坑的解决方法
Mybatis的逆向工程,MySQL8的数据库,8.0.11驱动的逆向工程的坑的解决方法 参考文章: (1)Mybatis的逆向工程,MySQL8的数据库,8.0.11驱动的逆向工程的坑的解决方法 ( ...
- PHP导出CSV文件出现乱码的解决方法
PHP导出CSV文件出现乱码的解决方法 参考文章: (1)PHP导出CSV文件出现乱码的解决方法 (2)https://www.cnblogs.com/xingxia/p/php_csv.html 备 ...
- [转]html导出到excel数据格式不正确解决方法
[转]html导出到excel数据格式不正确解决方法 参考文章: (1)[转]html导出到excel数据格式不正确解决方法 (2)https://www.cnblogs.com/zhangxin44 ...
最新文章
- 抽屉效果的实现(DrawerLayout和SlidingMenu的对比)
- 【Linux】一步一步学Linux——tr命令(55)
- xhtml标签和html标签,XHTML常用标签
- 问题十:【总结】解决了问题四~问题九,vec3这个类的代码应该都能看懂了
- java 悬浮提示框_弹出提示框的方式——java
- oracle plsql存储过程中out模式参数的用法
- [源]云计算技术堆栈系列——鸟瞰
- 全自动与半自动手表的区别_半自动和全自动的区别在哪里?
- java numberformat 方法_java.text.NumberFormat使用方法
- 创意PS:-----程序员变身超人
- nw.js html5,nw.js 如何使用?
- python批量生成经纬度坐标查询_用Python评测三种批量查询经纬度的方法,你pick哪一种?...
- 【对讲机的那点事】对讲机电池、充电器使用说明须知
- python 豆瓣电影top250_python 爬豆瓣电影top250
- ELF文件——DWARF源码解析
- [FPGA]1 MRCC与SRCC学习
- springboot集成Lean Cloud 及时通讯
- Happyclass 完美破解极域,学生机房管理助手密码及限制!
- Android 手机应用开发经验 之 通过Socket(TCP/IP)与PC通讯
- Android新荣耀手机角标只增不减
热门文章
- docker编译的时候出现ls: cannot access /code/ibg_fund/fund-common/src/main/java/com/ibg/fund/channel/client/
- day01 js基础
- 太厉害了,用 CSS 实现一只自由飞翔的鸟儿
- 用html做一个双十一宣传网页,17年双十一总结|网页|电商|fly19891116- 原创作品 - 站酷 (ZCOOL)...
- 智能家居实训第六天 音频 视频播放器
- java左-右移运算符
- 计算机系统异常检测修复,如何修复计算机崩溃问题
- 凸多边形的划分——区间DP
- 微信测试公众号 接口配置信息
- 如何解决微信测试公众号配置失败的问题