利用poi操作word文档(针对docx格式)

一:认识POI 
Apache POI是一个开源的利用Java读写Excel、WORD等微软OLE2组件文档的项目。最新的3.5版本有很多改进,加入了对采用OOXML格式的Office 2007支持,如xlsx、docx、pptx文档。 
POI主页:poi.apache.org/ 

二:POI3.5相关下载 
                3.5Jar包下载地址 
                3.5源码下载地址 

三:POI组成部分概览 
以下是POI的几个重要组成部分,以及各组件的功能概述。 

POIFS 
POIFS是该项目的最古老,最稳定的一部分。.这是格式化OLE 2复合文档为纯Java的接口。 它同时支持读写功能。所有的组件,最终都依赖于它的定义 
HSSF 和 XSSF 
HSSF: MS-Excel 97-2003(.xls),基于BIFF8格式的JAVA接口。 
XSSF:MS-Excel 2007+(.xlsx),基于OOXML格式的JAVA接口。 
HWPF 和XWPF 
HWPF: MS-Word 97-2003(.doc),基于BIFF8格式的JAVA接口。只支持.doc文件简单的操作,读写能力有限。本API为POI项目早期开发,很不幸的 是主要负责HWPF模块开发的工程师-“Ryan Ackley”已经离开Apache组织,现在该模块没有人维护、更新、完善。 
XWPF:MS-Word 2007+(.docx),基于OOXML格式的JAVA接口。较HWPF功能完善。 

四:利用POI提取Word文本内容及批注 
97-2003: 

import org.apache.poi.POITextExtractor; 
import org.apache.poi.hwpf.extractor.WordExtractor; 
//得到.doc文件提取器 
org.apache.poi.hwpf.extractor.WordExtractor doc = new WordExtractor(new FileInputStream(filePath)); 
//提取.doc正文文本 
String text = doc.getText(); 
//提取.doc批注 
String[] comments = doc. getCommentsText(); 

2007 

import org.apache.poi.POITextExtractor; 
import org.apache.poi.xwpf.extractor.XWPFWordExtractor; 
import org.apache.poi.xwpf.usermodel.XWPFComment; 
import org.apache.poi.xwpf.usermodel.XWPFDocument; 
//得到.docx文件提取器 
org.apache.poi.xwpf.extractor.XWPFWordExtractor docx = new XWPFWordExtractor(POIXMLDocument.openPackage(filePath)); 
//提取.docx正文文本 
String text = docx.getText(); 
//提取.docx批注 
org.apache.poi.xwpf.usermodel.XWPFComment[] comments = docx.getDocument()).getComments(); 
for(XWPFComment comment:comments){ 
comment.getId();//提取批注Id 
comment.getAuthor();//提取批注修改人 
comment.getText();//提取批注内容 

五:利用POI提取Word总页数、总字符数... 
97-2003 
WordExtractor doc = new WordExtractor(new FileInputStream(filePath));//.doc格式Word文件提取器 
int pages = doc.getSummaryInformation().getPageCount();//总页数 
int wordCount = doc.getSummaryInformation().getWordCount();//总字符数 
2007: 

XWPFDocument docx = nnew XWPFDocument(POIXMLDocument.openPackage(filePath)); 

int pages = docx.getProperties().getExtendedProperties().getUnderlyingProperties().getPages();//总页数 
int characters = docx.getProperties().getExtendedProperties().getUnderlyingProperties().getCharacters();// 忽略空格的总字符数 另外还有getCharactersWithSpaces()方法获取带空格的总字数。 


小技巧: 
2007采用了全新的OFFICE OPEN XML格式来存储,跟以前二进制文件格式的office 97-2003(.doc、.xls...)不同,所以可以直接重命名xx.docx的文件为xx.zip,用WinRar打开可以看到office2007的存储文件,其中word/document.xml里面保存了最重要的正文内容,word/comments.xml保存的是批注内容,可以多研究一下这些文件,有助于开发~ 

Office Open XML 文件格式简介  www.microsoft.com/china/msdn/library/office/office/OfficeOpenXMLFormats.mspx 
随着20世纪90年代XML的出现,企业计算客户开始逐渐认识到,在他们所依赖的计算机产品和应用中采用开放的格式和标准所带来的商业价值。IT专业人员将从通用的数据格式中受益匪浅,这种格式可能是XML,因为它拥有被应用程序、平台和Internet浏览器读取的能力。 

同样,随着在Microsoft Office 2000中对于XML格式的支持与采用,开发人员开始认识到,他们需要将以前的Microsoft Office版本中的二进制文件格式转换为XML格式。二进制文件(.doc,.dot,.xls,以及.ppt文件)在过去几年中一直肩负着存储和转换数据的重任,而现在它们无法满足新的市场需求的挑战,其中包括轻松地在异构应用之间传递数据,以及允许用户从这些数据中搜集商业信息。 

2007 Microsoft Office system为Microsoft Office Excel 2007,Microsoft Office Word 2007,和Microsoft Office PowerPoint 2007采用了基于XML的文件格式,从而延续了这种转移。新的文件格式,称为Office Open XML格式,解决了上述市场需求的问题,同时改变了您基于Microsoft Office文档建立解决方案的方式 
  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: POI是Apache基金会的一个Java API,用于处理Microsoft Office格式的文件,包括Word文档中的表格数据。下面是使用POI提取Word文档中表格数据的示例代码: ```java import java.io.File; import java.io.FileInputStream; import java.io.IOException; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.usermodel.XWPFTable; import org.apache.poi.xwpf.usermodel.XWPFTableRow; import org.apache.poi.xwpf.usermodel.XWPFTableCell; public class TableReader { public static void main(String[] args) throws IOException { File file = new File("example.docx"); FileInputStream fis = new FileInputStream(file); XWPFDocument document = new XWPFDocument(fis); for (XWPFTable table : document.getTables()) { for (XWPFTableRow row : table.getRows()) { for (XWPFTableCell cell : row.getTableCells()) { System.out.print(cell.getText() + "\t"); } System.out.println(); } } document.close(); fis.close(); } } ``` 在这个示例代码中,我们首先打开Word文档并读取其中的表格数据。然后,我们使用POI的XWPFTable、XWPFTableRow和XWPFTableCell类来遍历表格中的每个单元格,并使用getText()方法提取单元格中的文本。最后,我们将提取的表格数据打印到控制台上。 请注意,此示例假定Word文档的文件格式docx。如果你需要读取早期版本的Word文档,例如.doc格式的文件,你需要使用不同的POI类来处理不同的文件格式。 ### 回答2: POI是一个用于处理Microsoft Office格式文件(如Word、Excel和PowerPoint)的Java API。利用POI提取Word文档表格中的表格数据,可以按照以下步骤进行: 1.导入POI库:在Java项目中,首先需要导入POI的相关库文件,可以通过Maven或手动添加jar文件的方式引入POI库。 2.加载Word文档:使用POI的XWPFDocument类,加载需要处理的Word文档。 3.获取表格:通过XWPFDocument类的getTables()方法,可以获取Word文档中的所有表格对象,返回一个Table[]数组。 4.遍历表格:对于每个表格对象,可以使用foreach或for循环依次遍历。 5.获取行和列:对于每个表格对象,可以使用getTableRows()方法获取表格的所有行对象,返回一个List<XWPFTableRow>集合。对于每个行对象,可以使用getTableCells()方法获取表格的所有单元格对象,返回一个List<XWPFTableCell>集合。 6.提取数据:对于每个单元格对象,使用getText()方法可以获取单元格中的文本内容,将其保存到一个数据结构中,如Map、List或二维数组。 7.处理数据:根据需要进行数据的后续处理,如打印输出、存储到数据库或进行其他计算等。 8.关闭文档:处理完毕后,使用XWPFDocument对象的close()方法关闭文档。 使用POI提取Word文档表格中的表格数据,可以方便地进行数据解析和处理,适用于各种需要处理Word表格数据的应用场景。 ### 回答3: POI是一个Java库,可以用来操作Microsoft Office文件(如Word、Excel和PowerPoint)。在POI中,可以使用XWPFDocument类来读取和操作Word文档。 要提取Word文档中的表格数据,首先需要加载Word文档,并使用XWPFDocument类创建一个对象来表示该文档。然后,可以使用getTables()方法来获取文档中的所有表格。对于每个表格,可以使用getRows()方法获取表格中的所有行。对于每一行,再使用getTableCells()方法获取行中的所有单元格。 下面是一个简单的代码示例,演示如何使用POI提取Word文档表格中的表格数据: ``` import org.apache.poi.xwpf.usermodel.*; public class ExtractTableDataFromWord { public static void main(String[] args) { try { // 加载Word文档 XWPFDocument document = new XWPFDocument(new FileInputStream("example.docx")); // 获取文档中的所有表格 List<XWPFTable> tables = document.getTables(); // 遍历每个表格 for (XWPFTable table : tables) { // 获取表格中的所有行 List<XWPFTableRow> rows = table.getRows(); // 遍历每一行 for (XWPFTableRow row : rows) { // 获取行中的所有单元格 List<XWPFTableCell> cells = row.getTableCells(); // 遍历每个单元格,并打印单元格的值 for (XWPFTableCell cell : cells) { System.out.println(cell.getText()); } } } // 关闭文档 document.close(); } catch (Exception e) { e.printStackTrace(); } } } ``` 以上代码将读取名为"example.docx"的Word文档中的所有表格,并将每个单元格的值打印到控制台上。这个例子已经简化,如果需要更详细的操作,可以参考POI的官方文档或其他资源。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值