`
tiantianhappy
  • 浏览: 18000 次
  • 性别: Icon_minigender_1
  • 来自: 石家庄
社区版块
存档分类
最新评论

java poi读写word表格

    博客分类:
  • java
阅读更多

Poi读取word

 

1、需要的jar文件

a) 首先到apache官方网站下载poi资源 http://poi.apache.org/download.html

b) 下载完后解压

c) 读取写入word文件需要:poi-3.9-20121203.jarpoi-ooxml-3.9-20121203.jarpoi-scratchpad-3.9-20121203.jarxmlbeans-2.3.0.jar

2、代码

a) 读取方式一:

package com.tp.word;

 

import java.io.File;

import java.io.FileInputStream;

import java.io.InputStream;

 

import org.apache.poi.POIXMLDocument;

import org.apache.poi.POIXMLTextExtractor;

import org.apache.poi.hwpf.HWPFDocument;

import org.apache.poi.hwpf.extractor.WordExtractor;

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;

import org.apache.poi.openxml4j.opc.OPCPackage;

import org.apache.poi.poifs.filesystem.POIFSFileSystem;

import org.apache.poi.xwpf.extractor.XWPFWordExtractor;

 

public class TestRdWord {

 

     public static void main(String[] args) {

 

          testWord("D:/test.doc");

     }

 

   public static void testWord(String wordPath) {

       try {

                FileInputStream in = new FileInputStream(wordPath);// 载入文档

                 POIFSFileSystem pfs = new POIFSFileSystem(in);

                HWPFDocument hwpf = new HWPFDocument(pfs);

                Range range = hwpf.getRange();// 得到文档的读取范围

                TableIterator it = new TableIterator(range);

               // 迭代文档中的表格

              while (it.hasNext()) {

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

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

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

                             TableRow tr = tb.getRow(i);

                              // 迭代列,默认从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().trim();

                                        System.out.println(s);

                                   } // end for

                             } // end for

                      } // end for

                } // end while

          } catch (Exception e) {

              e.printStackTrace();

          }

       }// end method

 

}

b) 读取方式二:

package com.tp.word;

 

import java.io.File;

import java.io.FileInputStream;

import java.io.InputStream;

 

import org.apache.poi.POIXMLDocument;

import org.apache.poi.POIXMLTextExtractor;

import org.apache.poi.hwpf.HWPFDocument;

import org.apache.poi.hwpf.extractor.WordExtractor;

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;

import org.apache.poi.openxml4j.opc.OPCPackage;

import org.apache.poi.poifs.filesystem.POIFSFileSystem;

import org.apache.poi.xwpf.extractor.XWPFWordExtractor;

 

public class TestRdWord {

 

public static void main(String[] args) {

 

testWord1("D:/test.doc");

}

public static void testWord1(String filePath) {

try {

//word 2003: 图片不会被读取      

InputStream is = new FileInputStream(new File(filePath));

WordExtractor ex = new WordExtractor(is);

String text2003 = ex.getText();

System.out.println(text2003);

//word 2007 图片不会被读取, 表格中的数据会被放在字符串的最后      

/*OPCPackage opcPackage = POIXMLDocument.openPackage(filePath);

POIXMLTextExtractor extractor = new XWPFWordExtractor(opcPackage);

String text2007 = extractor.getText();

System.out.println(text2007);*/

 

catch (Exception e) {

e.printStackTrace();

}

}

}

 

注:此方法0307读取方式不一样

 

3、注意:这里读取的是表格文件,即:

 

员工姓名

性别

员工号

座位号

电话号

端口号

门禁卡

性质

               

 

4、输出为:

a) 方法一输出:

员工姓名

性别

员工号

座位号

电话号

端口号

门禁卡

性质

 

b) 方法二输出:

 

 员工姓名性别  员工号座位号电话号端口号门禁卡性质

Poi写入word

1、jar文件和读取的相同

2、代码:

package com.tp.word;

 

import java.io.ByteArrayOutputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.OutputStream;

import java.util.HashMap;

import java.util.Map;

 

import org.apache.poi.hwpf.HWPFDocument;

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

 

public class TestWtWord {

 

public static void main(String [] args){

 

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

 

map.put("姓名", "name");

map.put("性别", "sex");

map.put("员工号", "emp_no");

map.put("座位号", "site_no");

map.put("电话号", "tel_no");

map.put("端口号", "port_no");

map.put("门禁卡", "card_no");

 

HWPFDocument document = replaceDoc("D:/test.doc",map);

ByteArrayOutputStream ostream = new ByteArrayOutputStream();

        try {

            document.write(ostream);

            //输出word文件

            OutputStream outs=new FileOutputStream("D:/test.doc");

            outs.write(ostream.toByteArray());

            outs.close();

        } catch (IOException e) {

            e.printStackTrace();

        }

 

}

 

 

/**

     * 读取word模板并替换变量

     * @param srcPath

     * @param map

     * @return

     */

    public static HWPFDocument replaceDoc(String srcPath, Map<String, String> map) {

        try {

            // 读取word模板

            FileInputStream fis = new FileInputStream(new File(srcPath));

            HWPFDocument doc = new HWPFDocument(fis);

            // 读取word文本内容

            Range bodyRange = doc.getRange();

            // 替换文本内容

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

            

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

            }

            return doc;

        } catch (Exception e) {

            e.printStackTrace();

            return null;

        }

    }

 

}

 

这里原理实际上是:将源文件读取将内容替换再将新的文件输出替换原来的文件这样就相当于修改了文件的内容,如果不想覆盖源文件只需要不覆盖原来的文件就可以了。

<!--EndFragment-->
分享到:
评论

相关推荐

    Java读取Word中的表格(Excel),并导出文件为Excel

    2. **读取Word文档**: 使用Apache POI的`XWPFDocument`类来打开Word文档。你需要提供文件的输入流: ```java File wordFile = new File("path_to_word_file.docx"); FileInputStream fis = new FileInputStream...

    java poi操作word模版文件生成表单和修改

    Java POI 是一个开源库,专门用于处理Microsoft Office格式的文件,如Word(.doc, .docx)、Excel(.xls, .xlsx)等。在Java应用中,它被广泛用于读取、创建、更新和修改这些文件。在这个场景中,我们将重点讨论如何...

    POI读取 word 2003 和 word 2007 的例子

    值得注意的是 POI 在读取 word 文件的时候不会读取 word 文件中的图片信息 还有就是对于 2007 版的 word docx 如果 word 文件中有表格 所有表格中的数据都会在读取出来的字符串的最后 "&gt;这是一个POI读取word 2003 和...

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

    在这个场景中,我们关注的是如何利用Java POI库通过Word模板生成包含特定文本、表格和图片的报告。 首先,我们需要了解Java POI中的XWPFDocument类,它是用来处理.docx文件的。XWPFDocument可以读取、修改和创建...

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

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

    java使用poi操作.doc word模板替换,循环插入表格

    在Java编程中,Apache POI库是一个非常实用的工具,它允许开发者读写Microsoft Office格式的文件,如Word(.doc或.docx)、Excel(.xls或.xlsx)和PowerPoint(.ppt或.pptx)。本篇文章将深入探讨如何利用POI库在...

    java 利用POI读取Word文件中的内容

    本篇将详细介绍如何利用Apache POI库来读取Word文件中的内容。 首先,理解Apache POI的基本概念。POI是“Poor Obfuscation Implementation”的缩写,最初是为了反向工程微软的文件格式而创建的。如今,它已经成为...

    java poi读取word

    在这个场景中,我们关注的是如何使用Java POI来读取Word文档,并从中提取特定信息,如章节数、页码数和批注内容。 首先,让我们了解如何通过Java POI读取Word文档。在Java中,我们需要导入`org.apache.poi.xwpf....

    [简单]poi读取word 2007简单文本框值

    标题中的“poi读取word 2007简单文本框值”指的是使用Apache POI库来读取Microsoft Word 2007文档中简单文本框内的文本内容。Apache POI是一个流行的开源Java库,用于处理Microsoft Office格式的文件,如Word(.docx...

    java POI 导出复杂要求的表格

    Java POI 是一个非常流行的库,它允许程序员在Java应用程序中读取、写入和修改Microsoft Office格式的文件,特别是Excel工作簿。这篇博客“java POI 导出复杂要求的表格”可能详细介绍了如何使用POI库来创建和定制...

    java POI生成word.zip

    Java POI库是Apache软件基金会的一个开源项目,它允许开发者读取、创建、修改Microsoft Office格式的文件,包括Word文档(.doc和.docx)。在本案例中,"java POI生成word.zip"是一个压缩包,包含使用Java POI库生成...

    POI读取word文档的文字内容和图片内容

    在本主题中,我们将深入探讨如何使用POI库读取Word文档中的文字内容和图片。 首先,我们需要理解Word文档的基本结构。Word文档本质上是由一系列基于XML的数据存储在.OFFICEML格式的文件中,这使得我们可以通过解析...

    java poi 填充word(合并单元格,添加图片,设置字号)(csdn)————程序.pdf

    Java POI 是一个用于操作Microsoft Office格式文件的开源库,特别是在Java环境中处理Word文档非常有用。在本示例中,我们看到如何使用Java POI来填充Word文档,包括合并单元格、添加图片以及设置字号。以下是对代码...

    Java POI读取word生成

    在Java编程中,使用POI库可以实现自动化操作,例如读取、创建、修改和展示这些文件。在这个场景中,我们关注的是如何利用Java POI来生成Word文档,以便有效地展示和规范数据。 首先,理解POI的基本概念是很重要的。...

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

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

    poi将word转换成html、样式 表格 图片处理

    Apache POI 提供了Java API,使得开发者可以在Java环境中读写Microsoft Office格式的文件。它支持多种文件格式,包括HSSF(旧版的Excel)、XSSF(新版本的Excel)、HWPF(旧版的Word)和XWPF(新版本的Word)等。 ...

    java POI完整示例,POI将word转HTML,数据库倒出数据到Excel等

    在这个示例中,我们可能利用POI的HWPF库来读取Word文档,然后将其内容转换成HTML格式。这在需要在网络上显示Word内容或者希望在网页上保持文档格式时非常有用。转换过程涉及解析Word文档的各个部分,如段落、表格和...

    Java通过POI读取Excel遍历数据,批量生成word文档

    本教程将重点讲解如何使用Apache POI库来读取Excel数据,并基于这些数据批量生成Word文档。Apache POI是一个开源项目,它允许Java开发者处理Microsoft Office格式的文件,如Excel(.xlsx或.xls)和Word(.docx)。 ...

    Java利用poi对word插入文字图片

    在Java编程领域,Apache POI库是一个非常实用的工具,它允许开发者读写Microsoft Office格式的文件,如Word、Excel和PowerPoint。本项目“Java利用poi对word插入文字图片”是一个具体的示例,旨在教给你如何使用...

Global site tag (gtag.js) - Google Analytics