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

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中,我们需要使用`java.io`和`java.nio`包来读取和写入文件,包括压缩包文件的解压和操作。 - **流处理**:在处理文件内容时,可能会用到`InputStream`和`OutputStream`来读写数据,以及`...

    Java通过word模板配置书签生成word

    "Java通过word模板配置书签生成word"是一个技术方案,它利用了Java的API来处理Microsoft Word文档,特别是Apache POI库,这是一种强大的工具,允许开发者在Java程序中创建、修改和展示MS Office格式的文件。...

    java 使用 freemarker 导出word 包含 图片和动态的数据表,动态行和动态列

    至于图片的动态展示,Java代码需要处理图片的读取和写入,确保图片能正确地插入到Word文档中。如果`imagePath`是URL,可能需要下载图片到本地,再进行操作。如果是本地路径,可以将其转换为流并传递给Word文档对象。...

    java代码实现填充word模板生成word合同的实例

    Apache POI是Java平台上的一个开源项目,它允许Java应用程序读取、写入和修改Microsoft Office格式的文件,包括Word(.docx)文件。在这个实例中,我们主要会用到它的`XWPFDocument`和`XWPFParagraph`等类来操作Word...

    Java Poi流 根据Word模板插入相应的文本、表格和图片,生成新的Word报告

    Java POI库是Apache软件基金会开发的一个开源项目,专门用于读写Microsoft Office格式的文件,如Word(.doc和.docx)、Excel(.xls和.xlsx)等。在本主题中,我们将深入探讨如何使用Java POI流处理Word模板,插入...

    java POI-lib,word中写入图片

    Java POI库是Apache软件基金会开发的一个开源项目,专门用于处理Microsoft Office格式的文件,如Word、Excel和PowerPoint。在Java中,如果你需要在Word文档中插入图片,POI库提供了解决方案。这个过程涉及到对Word...

    Java操作word模板读写

    总的来说,Java操作Word模板读写是一个涉及文件I/O、XML解析和文档格式理解的综合任务,通过Apache POI等库,我们可以方便地实现这一目标。在实际开发中,根据需求选择合适的方法和工具,以提高效率和灵活性。

    java使用word模板导出个人简历

    本教程将探讨如何利用Java和特定的模板引擎,如Freemarker,来处理Word模板,生成doc和docx格式的个人简历文件。以下是相关知识点的详细说明: 1. **Freemarker模板引擎**: Freemarker是一个强大的、开源的模板...

    JAVA 读取visio word excel 数据及详细jar使用说明

    在处理Visio、Word和Excel时,这个库可能不是直接用来读取或写入数据的,但它可以辅助设置和解析运行时配置,例如指定要操作的文件路径或处理参数。 接下来是tlbimp.jar,这是一个工具,用于将类型库(Type Library...

    javaweb 使用freemaker生成word文件模板

    Apache POI是一个开源的Java库,用于读写Microsoft Office格式的文件,包括Word。使用POI,我们可以创建一个新的Word文档,然后将FreeMarker生成的文本写入到文档中,设置好样式,最后保存为`.doc`或`.docx`格式。 ...

    java使用poi根据word模板生成word(图片及文字).zip

    3. **读取Word模板**:使用XWPFDocument类,你可以加载一个.docx模板文件。这个类提供了访问文档内容的方法,包括段落(XWPFParagraph)、表格(XWPFTable)、图片(XWPFPictureData)等。 4. **替换标签**:在读取...

    java操作word可操作书签

    1. **解压 .docx 文件**:使用 `java.util.ZipFile` 类来打开并读取 .docx 文件,获取 `word/document.xml` 的 `ZipEntry`。 2. **解析 XML**:使用 `javax.xml.parsers.DocumentBuilderFactory` 和 `...

    用Java代码把数据导入Word的指定位置

    通过Apache POI,我们可以对Word文档进行读取、写入和修改等操作。 要实现将数据导入Word的指定位置,我们首先需要创建一个Java项目,并引入Apache POI的依赖。在Maven项目中,可以在pom.xml文件中添加以下依赖: ...

    java itext生成多页的word模板

    总的来说,利用Java的iText库生成多页的Word模板需要一定的技巧和对PDF及Office文档格式的理解。通过结合不同库的功能,我们可以创建出满足需求的复杂文档模板。对于中文支持,正确选择和注册字体是至关重要的,同时...

    poi读写word模板/JAVA生成word包

    6. **读取Word模板**:如果要使用模板,可以先用`XWPFDocument`打开模板文件,然后替换模板中的占位符。 7. **写入文件**:最后,使用`document.write(outputStream)`将文档写入到指定的OutputStream。 在实际应用...

    java生成word模板详解

    Apache POI是Java中广泛使用的库,它允许开发者读写Microsoft Office格式的文件,包括Word(.doc和.docx)。这个库提供了一套API,通过这些API可以创建、修改Word文档的内容和格式。例如,你可以创建新的段落、设置...

    java Apache poi 对word doc文件进行读写操作

    在实际应用中,Apache POI 的功能不仅限于简单的读写操作,还支持复杂的格式转换、样式调整和模板填充等功能,是 Java 开发者处理 Word 文件的强大工具。然而,需要注意的是,由于 `.doc` 文件格式的复杂性,处理...

    java据word标签写入相应信息

    首先,Apache POI是Java中广泛使用的库,它支持读写Microsoft Office格式的文件,包括Word(.doc和.docx)。对于.docx文件,Apache POI提供了XWPFDocument类来处理。下面是一些关键步骤: 1. **导入必要的库**:在...

    JAVA根据模板生成word文件

    本文将详细讲解如何利用Java技术根据模板生成Word文件,并提供相关资源和步骤来帮助开发者实现这一功能。 1. **模板引擎选择** 在Java中,有多种库可以帮助我们根据模板生成Word文档,例如Apache POI、FreeMarker...

Global site tag (gtag.js) - Google Analytics