POI之根据模板导出word-yellowcong
2017-11-21 16:46
459 查看
根据模版导出word这个东西在实际开发中,是很常用的,我今天遇到坑了,就是如何根据word模版生成word。网上的代码好多都是坑爹,不是缺环境,就是却方法,所以我自己做了一个小例子。如果希望有图片替换的教程,大家可以给我留言
![](https://img-blog.csdn.net/20171121163900883?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWVsbGxvd2Nvbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
环境搭建
<!-- excel --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.17</version> </dependency> <!-- word --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-scratchpad</artifactId> <version>3.17</version> </dependency> <!-- xlsx --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.17</version> </dependency> <!-- xlsx 依赖这个包 --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml-schemas</artifactId> <version>3.17</version> </dependency>
帐票模版
实现代码
package com.yellowcong.dao; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import org.apache.poi.hwpf.HWPFDocument; import org.apache.poi.hwpf.usermodel.Paragraph; import org.apache.poi.hwpf.usermodel.Range; /** * @version $Id$ */ public class POITest { public static void main(String[] args) throws Exception, IOException { String file = "C:/Users/zhangrw/Desktop/test/指名業者指名理由書.doc"; //获取到文档 HWPFDocument doc = new HWPFDocument(new FileInputStream(file)); Range range = doc.getRange(); //查看段落数量 int paraNum = range.numParagraphs(); for(int i=0;i<paraNum;i++){ //获取段落 Paragraph paragraph =range.getParagraph(i); //当存在替换符号的情况 if(paragraph.text().indexOf("$")>-1){ paragraph.replaceText("$共通.契約名$", "yellowcong"); paragraph.replaceText("$共通.施工場所$", "yellowcong"); paragraph.replaceText("$案件.工事担当課$", "NB"); } } //保存doc文件 FileOutputStream out = new FileOutputStream(new File("C:/Users/zhangrw/Desktop/test/demo2.doc")); doc.write(out); out.close(); } }
优化后的代码
只需要提供输入、输出、替换的代码三个参数,就可以完成张票的生成package com.yellowcong.dao; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.util.HashMap; import java.util.Map; import org.apache.poi.hwpf.HWPFDocument; import org.apache.poi.hwpf.usermodel.Paragraph; import org.apache.poi.hwpf.usermodel.Range; /** * * * @version $Id$ */ public class POITest { /** * @param args * @throws Exception * @throws IOException */ public static void main(String[] args) throws Exception, IOException { String inFile = "C:/Users/zhangrw/Desktop/test/指名業者指名理由書.doc"; String outFile = "C:/Users/zhangrw/Desktop/test/demo3.doc"; //需要替换的模版代码 Map<String,String> map = new HashMap<String,String>(); map.put("$共通.契約名$", "yellowcong"); map.put("$共通.施工場所$", "yellowcong"); map.put("$案件.工事担当課$", "NB"); //获取修改模版后的代码 HWPFDocument doc = createTemplateDoc(inFile, map); //保存doc文件 saveDoc(doc,outFile); } /** * 输出文件 * @param doc * @param outPath */ private static void saveDoc(HWPFDocument doc,String outPath){ FileOutputStream out = null; try { out = new FileOutputStream(new File(outPath)); doc.write(out); } catch (Exception e) { // TODO 自動生成された catch ブロック e.printStackTrace(); }finally{ if(out != null){ try { out.close(); } catch (IOException e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } } } } /** 根据代码的code,格式化输出数据 * @param file * @param map * @return * @throws IOException * @throws FileNotFoundException */ private static HWPFDocument createTemplateDoc(String file, Map<String, String> map) throws IOException, FileNotFoundException { //获取到文档 HWPFDocument doc = new HWPFDocument(new FileInputStream(file)); Range range = doc.getRange(); //查看段落数量 int paraNum = range.numParagraphs(); for(int i=0;i<paraNum;i++){ //获取段落 Paragraph paragraph =range.getParagraph(i); if(paragraph.text().indexOf("$")>-1){ for(Map.Entry<String, String> entry:map.entrySet()){ paragraph.replaceText(entry.getKey(), entry.getValue()); } } } return doc; } }
替换后效果
相关文章推荐
- poi根据模板导出word(包含图片、动态生成表格、合并单元格)
- aspx根据模板导出word(含文字和图片)
- 根据模板生成word文件并导出保存到本地
- POI根据EXCEL模板,修改内容导出新EXCEL
- 【Apache POI】Java Web根据模板导出word文件
- poi根据模板导出excel
- POI根据模版导出word
- poi根据excel模板文件六步完成替换导出
- POI根据模板导出Excle
- 使用 poi 根据 word 模板生成 word 文件
- 根据模板生成word文件并导出保存到本地
- velocity根据模板导出word并下载工具方法
- poi导出word2003(动态数据,不用模板,且生成word能再次导入)
- POI模板导出word
- java 根据模板,导出word并提供下载
- java-导入到Excel_POI根据模板(excel表头)导出excel
- java 根据模板,导出word并提供下载
- 使用 poi 根据 word 模板生成 word 文件
- java根据ftl模板导出word文档
- Java中根据模板导出数据到word的解决方案