java 读写word java 动态写入 模板文件

import java.io.ByteArrayOutputStream;

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.Iterator;

import java.util.Map;


import org.apache.poi.hwpf.HWPFDocument;

import org.apache.poi.hwpf.model.FieldsDocumentPart;

import org.apache.poi.hwpf.usermodel.Field;

import org.apache.poi.hwpf.usermodel.Fields;

import org.apache.poi.hwpf.usermodel.Paragraph;

import org.apache.poi.hwpf.usermodel.Range;

import org.apache.poi.hwpf.usermodel.Table;

import org.apache.poi.hwpf.usermodel.TableCell;

import org.apache.poi.hwpf.usermodel.TableIterator;

import org.apache.poi.hwpf.usermodel.TableRow;



/**

 * @author zhangchaochao

 * @date 2015-12-4上午10:30:59

 */

public class MSWordPoi4  

{  

      

    /** 

    * @param args 

    */  

    public static void main(String[] args)  

    {  

        Map<String, String> map = new HashMap<String, String>();  

        map.put("${sub}", "湖南大学");  

        map.put("${item2.school}", "湖南大学");  

        map.put("${item2.address}", "湖南");  

//        map.put("${item1.name}", "王五1");  

//        map.put("${item1.numberStudent}", "编号002");  

//        map.put("${item1.sex}", "男2");  

//        map.put("${item1.age}", "19");  

        String srcPath = "D:\\铸造工艺卡.doc";  

        readwriteWord(srcPath, map);  

    }  

      

    /** 

    * 实现对word读取和修改操作 

    *  

    * @param filePath 

    *            word模板路径和名称 

    * @param map 

    *            待填充的数据,从数据库读取 

    */  

    public static void readwriteWord(String filePath, Map<String, String> map)  

    {  

        // 读取word模板  

        // String fileDir = new  

        // File(base.getFile(),"http://www.cnblogs.com/http://www.cnblogs.com/../doc/").getCanonicalPath();  

        FileInputStream in = null;  

        try  

        {  

            in = new FileInputStream(new File(filePath));  

        }  

        catch (FileNotFoundException e1)  

        {  

            e1.printStackTrace();  

        }  

        HWPFDocument hdt = null;  

        try  

        {  

            hdt = new HWPFDocument(in);  

        }  

        catch (IOException e1)  

        {  

            e1.printStackTrace();  

        }  

        Fields fields = hdt.getFields();  

        Iterator<Field> it = fields.getFields(FieldsDocumentPart.MAIN)  

                .iterator();  

        while (it.hasNext())  

        {  

            System.out.println(it.next().getType());  

        }  

          

        //读取word文本内容  

        Range range = hdt.getRange();  

        TableIterator tableIt = new TableIterator(range);   

        //迭代文档中的表格  

        int ii = 0;  

        while (tableIt.hasNext()) {    

            Table tb = (Table) tableIt.next();    

            ii++;  

            System.out.println("第"+ii+"个表格数据...................");  

            //迭代行,默认从0开始  

            for (int i = 0; i < tb.numRows(); i++) {    

                TableRow tr = tb.getRow(i);    

                //只读前8行,标题部分  

                if(i >=8) break;  

                //迭代列,默认从0开始  

                for (int j = 0; j < tr.numCells(); j++) {    

                    TableCell td = tr.getCell(j);//取得单元格  

                    //取得单元格的内容  

                    for(int k=0;k<td.numParagraphs();k++){    

                        Paragraph para =td.getParagraph(k);    

                        String s = para.text();    

                        System.out.println(s);  

                    } //end for     

                }   //end for  

            }   //end for  

        } //end while  

        //System.out.println(range.text());  

          

        // 替换文本内容  

        for (Map.Entry<String, String> entry : map.entrySet())  

        {  

            range.replaceText(entry.getKey(), entry.getValue());  

        }  

        ByteArrayOutputStream ostream = new ByteArrayOutputStream();  

        String fileName = "" + System.currentTimeMillis();  

        fileName += ".doc";  

        FileOutputStream out = null;  

        try  

        {  

            out = new FileOutputStream("D:/" + fileName, true);  

        }  

        catch (FileNotFoundException e)  

        {  

            e.printStackTrace();  

        }  

        try  

        {  

            hdt.write(ostream);  

        }  

        catch (IOException e)  

        {  

            e.printStackTrace();  

        }  

        // 输出字节流  

        try  

        {  

            out.write(ostream.toByteArray());  

        }  

        catch (IOException e)  

        {  

            e.printStackTrace();  

        }  

        try  

        {  

            out.close();  

        }  

        catch (IOException e)  

        {  

            e.printStackTrace();  

        }  

        try  

        {  

            ostream.close();  

        }  

        catch (IOException e)  

        {  

            e.printStackTrace();  

        }  

    }  

}


获取【下载地址】 

转载于:https://my.oschina.net/u/2539482/blog/539352

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值