`
cczzyc
  • 浏览: 23124 次
社区版块
存档分类
最新评论

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(); 
        } 
    } 

需要的jar包看附件

0
0
分享到:
评论

相关推荐

    java 将内容,图片写到word中

    一个使用java后台代码,生成word文档的小例子

    读取Excel表格数据写入Word

    java实现读取Excel数据,根据一定格式写入Word,包含源代码,所需jar包及打包后的可执行jar文件,解压后将ExcelTrans直接导入MyEclipse即可,项目上可能会出现一个小叉,但是可以正常运行。

    java 读取 doc docx word 中的内容 数据

    使用java方便读取word 中的内容,效率高

    关于Java使用EasyExcel导出动态数据为Excel文件SpringBoot代码项目示例

    1、Java导出动态数据为Excel文件,具体示例可以参考:https://img-blog.csdnimg.cn/1cc86ee5dffa48669e2b97283585fad2.png 2、项目使用SpringBoot,Ali3.0.5版本的easyexcel框架。 3、资源内有具体的使用说明和易...

    java实现在pdf模板的指定位置插入图片

    主要为大家详细介绍了java如何实现在pdf模板的指定位置插入图片,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    JAVA上百实例源码以及开源项目

    Java读写文本文件的示例代码 1个目标文件。 java俄罗斯方块 一个目标文件。 Java非对称加密源码实例 1个目标文件 摘要:Java源码,算法相关,非对称加密  Java非对称加密源程序代码实例,本例中使用RSA加密技术,...

    JAVA上百实例源码以及开源项目源代码

    Java读写文本文件的示例代码 1个目标文件。 java俄罗斯方块 一个目标文件。 Java非对称加密源码实例 1个目标文件 摘要:Java源码,算法相关,非对称加密  Java非对称加密源程序代码实例,本例中使用RSA加密技术,...

    java开源包4

    缓存读取自redis的slave节点,写入到redis的master节点。 Java对象的SQL接口 JoSQL JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java...

    java开源包101

    缓存读取自redis的slave节点,写入到redis的master节点。 Java对象的SQL接口 JoSQL JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java...

    java开源包11

    缓存读取自redis的slave节点,写入到redis的master节点。 Java对象的SQL接口 JoSQL JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java...

    java开源包6

    缓存读取自redis的slave节点,写入到redis的master节点。 Java对象的SQL接口 JoSQL JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java...

    java开源包8

    缓存读取自redis的slave节点,写入到redis的master节点。 Java对象的SQL接口 JoSQL JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java...

    java开源包9

    缓存读取自redis的slave节点,写入到redis的master节点。 Java对象的SQL接口 JoSQL JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java...

    java开源包10

    缓存读取自redis的slave节点,写入到redis的master节点。 Java对象的SQL接口 JoSQL JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java...

    java开源包5

    缓存读取自redis的slave节点,写入到redis的master节点。 Java对象的SQL接口 JoSQL JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java...

    java开源包1

    缓存读取自redis的slave节点,写入到redis的master节点。 Java对象的SQL接口 JoSQL JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java...

    java开源包3

    缓存读取自redis的slave节点,写入到redis的master节点。 Java对象的SQL接口 JoSQL JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java...

    java开源包2

    缓存读取自redis的slave节点,写入到redis的master节点。 Java对象的SQL接口 JoSQL JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java...

    java开源包7

    缓存读取自redis的slave节点,写入到redis的master节点。 Java对象的SQL接口 JoSQL JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java...

Global site tag (gtag.js) - Google Analytics