Word文档作为一种广泛使用的文件格式,常常承载着丰富的表格信息,这些信息可能涉及到财务报表、项目规划、实验数据记录等多方面内容。将这些表格数据提取出来,能够方便进行数据分析以及内容再创作等场景。通过使用Java实现Word文档表格数据的提取,可以确保数据处理的一致性和准确性,同时大大减少所需的时间和成本。本文将介绍如何使用Java提取Word文档中的表格数据。
- 用Java提取Word文档表格到文本文件
- 用Java提取Word文档表格到Excel文件
本文所使用的方法需要用到免费的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文档中的表格数据,提供步骤介绍以及代码示例。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。