java解析word2003 doc文件中的表格

本文介绍了如何使用Apache POI插件解析包含表格的Word2003(DOC)文件,同时探讨了Word97-2003的文件加密机制,包括RC4和MD5算法。提供了Java代码实现和相关资源链接,包括GitHub项目以及Jar包下载。

1;apache poi插件链接http://poi.apache.org/ 这个插件主要用于office文件文本内以及富文本(表格,图片)等的提取,还有支持对已知密码的office文件的提取,
 黑框里面的是Word (HWPF+XWPF)
其他格式的文件加密以及解密都有 见链接http://poi.apache.org/encryption.html
http://www.openoffice.org/sc/compdocfileformat.pdf
因为之前做全文检索的时候需要提取word03里面的表格进行分析,使用这个插件对加密的文件不支持,所以研究了下doc文件格式以及它的加密方式,另外office07系列的比较简单,基本都是对xml解析,这里就不分析了。再说一句,这里只是对linux平台,其他调用微软com的那套就不用说了。

2;首先先说下word97-03文件是怎么加密的,word加密时并不是所有字节都加密,只是带有文本,表格,富文本,图片的stream才会加密,涉及到的加密算法有RC4,MD5算法。
具体细节参考:
http://wenku.baidu.com/link?url=TrCAFtr1mHXZbh3qnnOlhYmXTS7-ynw-CES0W6KOUzRzzRg7l04Y5LXl0V3W8pQRGO4SxyzXDlXk5zlLOzPphlXOxfC6UglqRzJlnb6439_

这里只是列出一些代码实现:
字符串转utf8

 public static String utf8ToUnicode(String inStr) {
      char[] myBuffer = inStr.toCharArray();

      StringBuffer sb = new StringBuffer();
      for (int i = 0; i < inStr.length(); i++) {
       UnicodeBlock ub = UnicodeBlock.of(myBuffer[i]);
          if(ub == UnicodeBlock.BASIC_LATIN){
           sb.append(myBuffer[i]);
          }else if(ub == UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS){
           int j = (int) myBuffer[i] - 65248;
           sb.append((char)j);
          }else{
           short s = (short) myBuffer[i];
              String hexS = Integer.toHexString(s);
              String unicode = "\\u"+hexS;
           sb.append(unicode.toLowerCase());
          }
      }
      return sb.toString();
  }
//验证passwd
public boolean  verifypwd(
### 回答1: 要使用Java解析Word文件中的表格,可以使用Apache POIApache Tika库。 以下是一些基本步骤: 1. 导入Apache POIApache Tika库。 ``` <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.1.2</version> </dependency> <dependency> <groupId>org.apache.tika</groupId> <artifactId>tika-core</artifactId> <version>2.0.0</version> </dependency> ``` 2. 使用Tika解析Word文件。 ``` FileInputStream inputStream = new FileInputStream(new File("file.docx")); Parser parser = new AutoDetectParser(); ContentHandler handler = new BodyContentHandler(); Metadata metadata = new Metadata(); parser.parse(inputStream, handler, metadata); String content = handler.toString(); ``` 3. 使用POI解析表格。 ``` XWPFDocument doc = new XWPFDocument(new FileInputStream("file.docx")); List<XWPFTable> tables = doc.getTables(); for (XWPFTable table : tables) { // 处理表格数据 for (XWPFTableRow row : table.getRows()) { List<XWPFTableCell> cells = row.getTableCells(); for (XWPFTableCell cell : cells) { // 处理单元格数据 System.out.print(cell.getText() + "\t"); } System.out.println(); } } ``` 这些步骤可以帮助您开始解析Word文件中的表格。您可以根据自己的需求进行调整扩展。 ### 回答2: 用Java解析Word文件中的表格可以使用Apache POI库来实现。Apache POI是一个开源的Java API库,提供了访问操作Microsoft Office格式文件(如Word、ExcelPowerPoint)的功能。 首先需要导入Apache POI库的相关jar包,然后可以使用以下步骤来解析Word文件中的表格: 1. 创建一个Word文档对象,使用POIFSFileSystem类加载Word文件: ``` FileInputStream fis = new FileInputStream("path/to/word.doc"); POIFSFileSystem fileSystem = new POIFSFileSystem(fis); HWPFDocument document = new HWPFDocument(fileSystem); ``` 2. 获取文档的表格数量表格内容: ``` Range range = document.getRange(); int tableCount = range.numTables(); for (int i = 0; i < tableCount; i++) { Table table = range.getTable(i); int rowCount = table.numRows(); for (int j = 0; j < rowCount; j++) { TableRow row = table.getRow(j); int cellCount = row.numCells(); for (int k = 0; k < cellCount; k++) { TableCell cell = row.getCell(k); String cellText = cell.text(); // 可以在这里对表格中的内容进行处理或输出 } } } ``` 3. 解析表格后,记得关闭文件流: ``` document.close(); fis.close(); ``` 通过上述步骤,我们可以使用Java解析Word文件中的表格内容,并对表格内容进行处理或其他操作。请注意,以上代码仅适用于旧版的Word文档(.doc格式),如果是新版的Word文档(.docx格式),可以使用XWPFDocument类来解析。希望可以帮助到你! ### 回答3: 要用Java解析Word文件中的表格,可以使用Apache POI库来处理。Apache POI是一个开源的Java库,用于访问操作各种Office文档,包括Word文件。 首先,需要引入Apache POI的相关依赖包,例如poi、poi-ooxmlpoi-ooxml-schemas。然后,可以通过XWPFDocument类加载Word文件,并使用XWPFTable类来获取表格。 以下是一个简单的代码示例,演示如何解析Word文件中的表格: ```java import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.usermodel.XWPFTable; import java.io.FileInputStream; import java.io.IOException; public class WordTableParser { public static void main(String[] args) { try { FileInputStream file = new FileInputStream("word.docx"); // Word文件的路径 XWPFDocument document = new XWPFDocument(file); // 获取文档中的所有表格 for (XWPFTable table : document.getTables()) { // 解析表格数据 for (int i = 0; i < table.getRows().size(); i++) { for (int j = 0; j < table.getRow(i).getTableCells().size(); j++) { String cellText = table.getRow(i).getCell(j).getText(); System.out.print(cellText + "\t"); } System.out.println(); } } document.close(); file.close(); } catch (IOException e) { e.printStackTrace(); } } } ``` 在这个示例中,首先使用 FileInputStream 来读取Word文件,然后使用 XWPFDocument 加载文件。然后,使用 document.getTables() 方法获取文档中的所有表格,并使用嵌套循环遍历每个单元格获取表格中的数据。 这只是一个简单的示例,实际的需求可能会更加复杂,例如处理合并单元格、设置表格样式等。但通过这个示例可以了解如何使用Java解析Word文件中的表格
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值