⾸先百科⼀下POI是什么:
Apache POI是Apache软件基⾦会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。通过字⾯意思,我们⼤概知道这个API是可以⽤来做 java 导出word 及excel 的。下⾯不废话了,直接总结⼀下,java ⽤模板导出 word 的⽅法。⽬前项⽬中我⽤到的⽅法分为两种(今天先说第⼀种)。
1.使⽤poi读取模板word,然后导出所需要的word。
先说⼀下准备⼯作:
1.1 所需jar 包:这⾥我使⽤的是poi-3.9 jar 包,下⾯上依赖:
1.2 模板⽂件 xxxx.docx
这⾥要说⼀下有⼀个⼩坑,poi-3.9 ⽬前只⽀持读取 .docx 格式的 word,也就是office 2007以后的格式。请⼤家注意使⽤时把 word 模板改为.docx 后缀名。然后就是准备好替换的模板,如下图:
PS:这⾥重点说明⼀下,⼀个问题,就是在输⼊占位符的时候,⼀定⼀定⼀定要是从做到右连续输⼊占位符,不然会被识别为多个⽚段,导致占位符不匹配,困扰了我半天,所以来特此记录⼀下0.0
下⾯直接上代码,注意看步骤:
String path = request.getSession().getServletContext().getRealPath(\"/exceldemo/关于安排2017年市级机关住房解困资⾦的报告.docx\");//获取模板路径
FileInputStream is = new FileInputStream(path);//读⼊流中
XWPFDocument xdf = new XWPFDocument(is);//新建⼀个word⽂档
//变量
Map this.replaceText(xdf,params);//替换word中的变量。 这⾥⽤了⼀个⽅法replaceText(),就是替换变量的⽅法,代码如下:/** * 替换⽂档中的参数(word) * @param doc * @param params */ private void replaceText(XWPFDocument doc, Map this.replaceInPara(para, params); }} /** * 替换段落中的参数(word) * @param para * @param params */ private void replaceInPara(XWPFParagraph para, Map if (matcher(para.getParagraphText()).find()) { runs = para.getRuns(); for (int i=0; i runText = matcher.replaceFirst(String.valueOf(params.get(matcher.group(1)))); } para.removeRun(i); //重新插⼊run⾥内容格式可能与原来模板的格式不⼀致 para.insertNewRun(i).setText(runText); } } }} 下⾯看看替换后的效果: 因篇幅问题不能全部显示,请点此查看更多更全内容