poi操作word文档文件操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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文档建立解决方案的方式

POI是Apache的一个开源项目,可以到Apache网站下载相应的jar包文件,及其源文件。

POI提供了提取一些非TXT文本中文本内容的API,比如提取Word,Excel等,使用起来非常方便。

为了说明POI提起Word文件的方便和简单,通过提取一个Word文件的文本来,来了解POI API的功能。

假设在本地磁盘中存在一个Word文件

E:\POI\word\JBoss3.0 下配置和部署EJB简介.doc文件是具有格式的,内容如图所示:


下面看看提取它的内容是多么简单。

首先从Apache网站上下载POI的相关jar包。

新建一个测试类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package  org.shirdrn.word;
 
import  java.io.File;
import  java.io.FileInputStream;
import  java.io.FileNotFoundException;
import  java.io.IOException;
 
import  org.apache.poi.hwpf.extractor.WordExtractor;
 
public  class  MyWordExtractor {
 
public  static  void  main(String[] args) {
    File file = new  File( "E:\\POI\\word\\JBoss3.0 下配置和部署EJB简介.doc" );
    try  {
     FileInputStream fis = new  FileInputStream(file);
     WordExtractor wordExtractor = new  WordExtractor(fis);
     System.out.println( "【 使用getText()方法提取的Word文件的内容如下所示:】" );
     System.out.println(wordExtractor.getText());
    } catch  (FileNotFoundException e) {
     e.printStackTrace();
    } catch  (IOException e) {
    e.printStackTrace();
}
}
}

 

提取Word文件的文本内容,打印到控制台上,如下所示:

使用WordExtractor类的getTextFromPieces()方法提取:

wordExtractor.getTextFromPieces();

结果和上面是一样的。

WordExtractor类还有一个可以提取Word文件的各个段落的方法getParagraphText(),返回一个String[]数组,数组中每个元素为一个段的文本内容。

这里,对Word文件中换行也看成是一个段,测试如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package  org.shirdrn.word;
 
import  java.io.File;
import  java.io.FileInputStream;
import  java.io.FileNotFoundException;
import  java.io.IOException;
 
import  org.apache.poi.hwpf.extractor.WordExtractor;
 
public  class  MyWordExtractor {
 
public  static  void  main(String[] args) {
    File file = new  File( "E:\\POI\\word\\JBoss3.0 下配置和部署EJB简介.doc" );
    try  {
     FileInputStream fis = new  FileInputStream(file);
     WordExtractor wordExtractor = new  WordExtractor(fis);
     System.out.println( "【 使用getText()方法提取的Word文件的内容如下所示:】" );
     String[] paragraph = wordExtractor.getParagraphText();
     System.out.println( "该Word文件共有" +paragraph.length+ "段。" );
     for ( int  i= 0 ;i<paragraph.length;i++){
      System.out.println( "< 第 " +(i+ 1 )+ " 段的内容为 >" );
      System.out.println(paragraph[i]);
     }
    } catch  (FileNotFoundException e) {
     e.printStackTrace();
    } catch  (IOException e) {
    e.printStackTrace();
}
}
}

提取Word文件的文本内容,打印到控制台上,如下所示:

从上面的Word文件可以看出,最后一行是Word文件的一个换行符,使用WordExtractor提取时,也把它默认成为一个段,因为一个段结束后应该有一个回车换行符。

如果有多个Word文件,而且放在不同的目录下,要提取它们的文本内容,可以实现一个递归的函数,通过深度遍历,为每一个Word文件进行提取。

如果需要,可以将提取到的Word文件的文本内容输出到本地磁盘中,比如以txt记事本的根式保存。

从上面可以看出,提取Word文件的文本内容,实际上是将Word文件的格式去掉了,获取到文本的内容。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Apache POI 是一个 Java API,可以用来操作 Microsoft Office 格式的文件,包括 Word、Excel 和 PowerPoint 等。在本文中,我们将重点介绍如何使用 Apache POI 操作 Word 文档。 1. 添加 Maven 依赖 首先,我们需要在项目中添加 Apache POI 的依赖。在 pom.xml 文件中添加以下代码: ```xml <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.1.2</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>4.1.2</version> </dependency> ``` 2. 创建 Word 文档 要创建一个新的 Word 文档,我们需要使用 XWPFDocument 类。以下是创建一个空白文档的示例代码: ```java XWPFDocument document = new XWPFDocument(); ``` 3. 添加段落 要向文档中添加段落,我们需要使用 XWPFParagraph 类。以下是向文档中添加一个段落的示例代码: ```java XWPFParagraph paragraph = document.createParagraph(); paragraph.setAlignment(ParagraphAlignment.CENTER); XWPFRun run = paragraph.createRun(); run.setText("Hello, World!"); ``` 4. 添加表格 要向文档中添加表格,我们需要使用 XWPFTable 类。以下是向文档中添加一个表格的示例代码: ```java XWPFTable table = document.createTable(); XWPFTableRow row = table.getRow(0); row.getCell(0).setText("Name"); row.addNewTableCell().setText("Age"); row.addNewTableCell().setText("Gender"); XWPFTableRow row1 = table.createRow(); row1.getCell(0).setText("Tom"); row1.getCell(1).setText("25"); row1.getCell(2).setText("Male"); ``` 5. 保存文档 要保存文档,我们需要使用 FileOutputStream 类将文档写入文件中。以下是将文档保存为名为“example.docx”的文件的示例代码: ```java FileOutputStream out = new FileOutputStream("example.docx"); document.write(out); out.close(); document.close(); ``` 完整的示例代码: ```java import java.io.FileOutputStream; import java.io.IOException; import org.apache.poi.xwpf.usermodel.*; public class WordTest { public static void main(String[] args) throws IOException { XWPFDocument document = new XWPFDocument(); // 添加段落 XWPFParagraph paragraph = document.createParagraph(); paragraph.setAlignment(ParagraphAlignment.CENTER); XWPFRun run = paragraph.createRun(); run.setText("Hello, World!"); // 添加表格 XWPFTable table = document.createTable(); XWPFTableRow row = table.getRow(0); row.getCell(0).setText("Name"); row.addNewTableCell().setText("Age"); row.addNewTableCell().setText("Gender"); XWPFTableRow row1 = table.createRow(); row1.getCell(0).setText("Tom"); row1.getCell(1).setText("25"); row1.getCell(2).setText("Male"); // 保存文档 FileOutputStream out = new FileOutputStream("example.docx"); document.write(out); out.close(); document.close(); } } ``` 这是一个简单的示例,介绍了如何使用 Apache POI 操作 Word 文档。您可以进一步研究该 API,以了解更多高级功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值