word 文档中常常有包含关键数据的表格,将这些表格中的数据从文档中提取出来,可以用于进一步分析、报告制作或内容再创作等多种场景。通过使用 java 来自动化提取 word 文档中的表格,开发人员能够高效地提取和访问这些结构化数据,并将其转换为适用于数据库、电子表格等的格式,从而方便在不同场景中应用数据。本文将介绍如何利用 spire.doc for java 在 java 项目中实现从 word 文档中提取表格。
安装 spire.doc for java
首先,您需要在 java 程序中添加 spire.doc.jar 文件作为依赖项。您可以从此链接下载 jar 文件;如果您使用 maven,则可以通过在 pom.xml 文件中添加以下代码导入 jar 文件。
com.e-iceblue
e-iceblue
https://repo.e-iceblue.cn/repository/maven-public/
e-iceblue
spire.doc
13.3.0
使用 java 从 word 文档中提取表格
借助 spire.doc for java,开发人员可以使用 section.gettables() 方法从 word 文档中提取表格,然后再通过遍历行和单元格访问表格数据。提取 word 文档表格的详细操作步骤如下:
- 创建一个 document 对象。
- 使用 document.loadfromfile() 方法加载 word 文档。
- 使用 document.getsections() 方法访问文档中的各节并进行遍历。
- 使用 section.gettables() 方法访问每个节中的表格并进行遍历。
- 使用 table.getrows() 方法访问每个表格中的行并进行遍历。
- 使用 tablerow.getcells() 方法访问每行中的单元格并进行遍历。
- 通过遍历每个单元格中的段落,使用 tablecell.getparagraphs() 和 paragraph.gettext() 方法提取文本。
- 将提取到的表格数据写入 stringbuilder 对象中。
- 将格式化后的表格内容写入文件或按需使用。
- java
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("示例.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);
}
}
}
将 word 文档中的表格提取到 excel 工作表
开发人员还可以结合使用 spire.doc for java 和 spire.xls for java,从 word 文档中提取表格数据并将其写入 excel 工作表。首先,需要下载 spire.xls for java 或添加以下 maven 配置:
com.e-iceblue
e-iceblue
https://repo.e-iceblue.cn/repository/maven-public/
e-iceblue
spire.xls
15.3.1
将 word 文档中的表格提取到 excel 工作簿的详细步骤如下:
- 创建一个 document 对象。
- 创建一个 workbook 对象,并使用 workbook.getworksheets().clear() 方法移除默认的工作表。
- 使用 document.loadfromfile() 方法加载 word 文档。
- 使用 document.getsections() 方法访问文档中的各个节并进行遍历。
- 使用 section.gettables() 方法访问每个部分中的表格并进行遍历。
- 使用 workbook.getworksheets().add() 方法为每个表格创建一个工作表。
- 使用 table.getrows() 方法访问每个表格中的行并进行遍历。
- 使用 tablerow.getcells() 方法访问每行中的单元格并进行遍历。
- 通过遍历每个单元格中的段落,使用 tablecell.getparagraphs() 和 paragraph.gettext() 方法提取文本。
- 使用 worksheet.getrange().get(row, column).setvalue() 方法将提取的单元格文本写入工作表中的相应单元格。
- 根据需要设置工作表格式。
- 使用 workbook.savetofile() 方法将工作簿保存为 excel 文件。
- java
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 doc = new document();
// 创建一个工作簿对象
workbook workbook = new workbook();
// 移除默认的工作表
workbook.getworksheets().clear();
try {
// 加载一个word文档
doc.loadfromfile("示例.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();
}
// 将单元格文本写入工作表中对应的单元格
sheet.getrange().get(k 1, l 1).setvalue(celltext);
}
// 自动调整列宽
sheet.autofitcolumn(l 1);
}
}
}
}
} catch (exception e) {
throw new runtimeexception(e);
}
// 保存工作簿到文件,指定excel版本为2016
workbook.savetofile("output/wordtabletoexcel.xlsx", fileformat.version2016);
}
}
申请临时 license
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用javascript。获取有效期 30 天的临时许可证。