您的位置:首页 > 编程语言 > Java开发

利用Java读取并写入Word文件

2016-04-15 13:45 453 查看
 


利用Java读取并写入Word文件

标签: javaword文档
2014-11-26 17:54 11206人阅读 评论(5) 收藏 举报


 分类:
 

Java(15) 


版权声明:本文为博主原创文章,未经博主允许不得转载。

[java] view
plain copy

/* 

 * 文 件 名:  MSWordPoi4.<a href="http://lib.csdn.net/base/17" class="replace_word" title="Java EE知识库" target="_blank" style="color:#df3434; font-weight:bold;">java</a> 

 * 版    权:  Sunny Technologies Co., Ltd. Copyright YYYY-YYYY,  All rights reserved 

 * 描    述:  <描述> 

 * 修 改 人:  L.Hao 

 * 修改时间:  2014-8-8 

 * 跟踪单号:  <跟踪单号> 

 * 修改单号:  <修改单号> 

 * 修改内容:  <修改内容> 

 */  

package com.test;  

  

/** 

 * <一句话功能简述> 

 * <功能详细描述> 

 *  

 * @author  L.Hao 

 * @version  [版本号, 2014-8-8] 

 * @see  [相关类/方法] 

 * @since  [产品/模块版本] 

 */  

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;  

  

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:\\temp\\铸造工艺卡.doc";  

        readwriteWord(srcPath, map);  

    }  

      

    /** 

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

    *  

    * @param filePath 

    *            word模板路径和名称 

    * @param map 

    *            待填充的数据,从<a href="http://lib.csdn.net/base/14" class="replace_word" title="MySQL知识库" target="_blank" style="color:#df3434; font-weight:bold;">数据库</a>读取 

    */  

    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("F:/" + 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();  

        }  

    }  

}  

所使用到的jar是:






2

1

上一篇Java
动态的创建注入代码,注入方法给类或者接口并通过反射调用

下一篇Flex
和 Servlet 交互中文乱码问题
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: