Java实现提取Word文档表格数据
作者:Eiceblue
使用Java实现Word文档表格数据的提取,可以确保数据处理的一致性和准确性,同时大大减少所需的时间和成本,下面我们来看看具体实现方法吧
Word文档作为一种广泛使用的文件格式,常常承载着丰富的表格信息,这些信息可能涉及到财务报表、项目规划、实验数据记录等多方面内容。将这些表格数据提取出来,能够方便进行数据分析以及内容再创作等场景。通过使用Java实现Word文档表格数据的提取,可以确保数据处理的一致性和准确性,同时大大减少所需的时间和成本。本文将介绍如何使用Java提取Word文档中的表格数据。
本文所使用的方法需要用到免费的Free Spire.Doc for Java,Maven:
<repositories> <repository> <id>com.e-iceblue</id> <name>e-iceblue</name> <url>https://repo.e-iceblue.com/nexus/content/groups/public/</url> </repository> </repositories> <dependency> <groupId>e-iceblue</groupId> <artifactId>spire.doc.free</artifactId> <version>5.3.2</version> </dependency>
用Java提取Word文档表格到文本文件
我们可以使用库中的Section.getTables()方法从Word文档的各个节中获取表格,然后再遍历表格的行和列,获取表格中的段落文本,从而实现Word文档表格数据的提取。以下是操作步骤示例:
- 创建Document对象并从文件加载Word文档。
- 遍历文档各节,使用Section.getTables()访问其中的表格。
- 遍历每个表格的行和单元格,提取文本内容。
- 将提取的文本添加到StringBuilder。
- 输出或保存StringBuilder中的内容。
代码示例:
import com.spire.doc.*; import com.spire.doc.documents.Paragraph; import java.io.FileWriter; import java.io.IOException; public class ExtractWordTable { public static void main(String[] args) { // 创建一个文档对象 Document doc = new Document(); try { // 加载一个Word文档 doc.loadFromFile("GSample.docx"); // 遍历文档中的各节 for (int i = 0; i < doc.getSections().getCount(); i++) { // 获取一节 Section section = doc.getSections().get(i); // 遍历该节中的表格 for (int j = 0; j < section.getTables().getCount(); j++) { // 获取一个表格 Table table = section.getTables().get(j); // 收集所有表格内容 StringBuilder tableText = new StringBuilder(); for (int k = 0; k < table.getRows().getCount(); k++) { // 获取一行 TableRow row = table.getRows().get(k); // 遍历行中的单元格 StringBuilder rowText = new StringBuilder(); for (int l = 0; l < row.getCells().getCount(); l++) { // 获取一个单元格 TableCell cell = row.getCells().get(l); // 遍历段落以获取单元格中的文本 String cellText = ""; for (int m = 0; m < cell.getParagraphs().getCount(); m++) { Paragraph paragraph = cell.getParagraphs().get(m); cellText += paragraph.getText() + " "; } if (l < row.getCells().getCount() - 1) { rowText.append(cellText).append("\t"); } else { rowText.append(cellText).append("\n"); } } tableText.append(rowText); } // 使用try-with-resources将表格文本写入文件 try (FileWriter writer = new FileWriter("output/Tables/Section-" + (i + 1) + "-Table-" + (j + 1) + ".txt")) { writer.write(tableText.toString()); } } } } catch (IOException e) { throw new RuntimeException(e); } } }
结果
用Java提取Word文档表格到Excel文件
我们还可以将提取数据的方法与Free Spire.XLS for Java结合,将提取到的表格数据直接写入到Excel工作表中,从而实现Word文档表格到Excel工作表的提取。以下是操作步骤:
- 创建Document和Workbook对象,移除Workbook的默认工作表。
- 从Word文档加载内容到Document,并遍历各节与表格。
- 每遇到一个表格,就使用Workbook.getWordksheets().add()方法添加一个新工作表。
- 遍历表格的行和单元格,提取文本内容。
- 使用Worksheet.getRange().get().setValue()方法将提取的文本写入对应工作表的单元格,并设置格式。
- 保存Workbook为Excel文件。
代码示例
import com.spire.doc.*; import com.spire.doc.documents.Paragraph; import com.spire.xls.FileFormat; import com.spire.xls.Workbook; import com.spire.xls.Worksheet; public class ExtractWordTableToExcel { public static void main(String[] args) { // 创建Document对象 Document doc = new Document(); // 创建Workbook对象 Workbook workbook = new Workbook(); // 删除默认的工作表 workbook.getWorksheets().clear(); try { // 加载Word文档 doc.loadFromFile("Sample.docx"); // 遍历文档中的各节 for (int i = 0; i < doc.getSections().getCount(); i++) { // 获取一节 Section section = doc.getSections().get(i); // 遍历该节中的表格 for (int j = 0; j < section.getTables().getCount(); j++) { // 获取一个表格 Table table = section.getTables().get(j); // 为每个表格创建一个工作表 Worksheet sheet = workbook.getWorksheets().add("Section-" + (i + 1) + "-Table-" + (j + 1)); for (int k = 0; k < table.getRows().getCount(); k++) { // 获取一行 TableRow row = table.getRows().get(k); for (int l = 0; l < row.getCells().getCount(); l++) { // 获取一个单元格 TableCell cell = row.getCells().get(l); // 遍历单元格中的段落以获取文本 String cellText = ""; for (int m = 0; m < cell.getParagraphs().getCount(); m++) { Paragraph paragraph = cell.getParagraphs().get(m); if (m > 0 && m < cell.getParagraphs().getCount() - 1) { cellText += paragraph.getText() + "\n"; } else { cellText += paragraph.getText(); } // 将单元格的文本写入对应的Excel工作表的单元格中 sheet.getRange().get(k + 1, l + 1).setValue(cellText); } // 自动调整列宽 sheet.autoFitColumn(l + 1); } } } } } catch (Exception e) { throw new RuntimeException(e); } // 保存为Excel文件 workbook.saveToFile("output/WordTableToExcel.xlsx", FileFormat.Version2016); // 释放资源 workbook.dispose(); } }
结果
到此这篇关于Java实现提取Word文档表格数据的文章就介绍到这了,更多相关Java提取Word数据内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!