Java POI Word 写文档

 

一个使用Apache POI写word文档的实例:

  1 package apache.poi;
  2 
  3 import java.io.ByteArrayInputStream;
  4 import java.io.ByteArrayOutputStream;
  5 import java.io.File;
  6 import java.io.FileInputStream;
  7 import java.io.FileOutputStream;
  8 import java.io.IOException;
  9 import java.io.OutputStream;
 10 import java.util.HashMap;
 11 import java.util.Map;
 12 
 13 import org.apache.poi.hwpf.HWPFDocument;
 14 import org.apache.poi.hwpf.usermodel.Range;
 15 import org.apache.poi.poifs.filesystem.DirectoryEntry;
 16 import org.apache.poi.poifs.filesystem.POIFSFileSystem;
 17 
 18 
 19 public class ExportDocTest {
 20     
 21     public static void main(String[] args) {
 22         String destFile="D:\\11.doc";
 23         //#####################根据自定义内容导出Word文档#################################################
 24         StringBuffer fileCon=new StringBuffer();
 25         fileCon.append("               张大炮            男              317258963215223\n" +
 26                 "2011     09        2013     07       3\n" +
 27                 "    二炮研究              成人\n" +
 28                 "2013000001                             2013     07     08");
 29         fileCon.append("\n\r\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
 30         
 31         new ExportDocTest().exportDoc(destFile, fileCon.toString());
 32         
 33         //##################根据Word模板导出单个Word文档###################################################
 34         Map<String, String> map=new HashMap<String, String>();
 35         
 36         map.put("name", "Zues");
 37         map.put("sex", "男");
 38         map.put("idCard", "200010");
 39         map.put("year1", "2000");
 40         map.put("month1", "07");
 41         map.put("year2", "2008");
 42         map.put("month2", "07");
 43         map.put("gap", "2");
 44         map.put("zhuanye", "计算机科学与技术");
 45         map.put("type", "研究生");
 46         map.put("bianhao", "2011020301");
 47         map.put("nowy", "2011");
 48         map.put("nowm", "01");
 49         map.put("nowd", "20220301");
 50         //注意biyezheng_moban.doc文档位置,此例中为应用根目录
 51         HWPFDocument document=new ExportDocTest().replaceDoc("biyezheng_moban.doc", map);
 52         ByteArrayOutputStream ostream = new ByteArrayOutputStream();
 53         try {
 54             document.write(ostream);
 55             //输出word文件
 56             OutputStream outs=new FileOutputStream(destFile);
 57             outs.write(ostream.toByteArray());
 58             outs.close();
 59         } catch (IOException e) {
 60             e.printStackTrace();
 61         }
 62         
 63     }
 64     
 65     
 66     /**
 67      * 
 68      * @param destFile
 69      * @param fileCon
 70      */
 71     public void exportDoc(String destFile,String fileCon){
 72         try {
 73             //doc content
 74             ByteArrayInputStream bais = new ByteArrayInputStream(fileCon.getBytes());
 75             POIFSFileSystem fs = new POIFSFileSystem();
 76             DirectoryEntry directory = fs.getRoot(); 
 77             directory.createDocument("WordDocument", bais);
 78             FileOutputStream ostream = new FileOutputStream(destFile);
 79             fs.writeFilesystem(ostream);
 80             bais.close();
 81             ostream.close();
 82             
 83         } catch (IOException e) {
 84             e.printStackTrace();
 85         }
 86     }
 87     
 88     
 89     /**
 90      * 读取word模板并替换变量
 91      * @param srcPath
 92      * @param map
 93      * @return
 94      */
 95     public HWPFDocument replaceDoc(String srcPath, Map<String, String> map) {
 96         try {
 97             // 读取word模板
 98             FileInputStream fis = new FileInputStream(new File(srcPath));
 99             HWPFDocument doc = new HWPFDocument(fis);
100             // 读取word文本内容
101             Range bodyRange = doc.getRange();
102             // 替换文本内容
103             for (Map.Entry<String, String> entry : map.entrySet()) {
104                 bodyRange.replaceText("${" + entry.getKey() + "}", entry
105                         .getValue());
106             }
107             return doc;
108         } catch (Exception e) {
109             e.printStackTrace();
110             return null;
111         }
112     }
113 
114 }

例子中用到的附件(点击下载)

posted on 2012-04-11 11:23  Fat T  阅读(29673)  评论(7编辑  收藏  举报

导航