Java实现提取Word文档表格数据

 更新时间:2025年01月26日 08:24:38   作者: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数据内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringCloud Netflix Ribbon超详细讲解

    SpringCloud Netflix Ribbon超详细讲解

    这篇文章主要介绍了SpringCloud笔记HoxtonNetflix之Ribbon负载均衡,Ribbon是管理HTTP和TCP服务客户端的负载均衡器,Ribbon具有一系列带有名称的客户端(Named Client),对SpringCloud Ribbon负载均衡相关知识感兴趣的朋友一起看看吧
    2022-10-10
  • Spring Security添加二次认证的项目实践

    Spring Security添加二次认证的项目实践

    在用户自动登录后,可以通过对密码进行二次校验进而确保用户的真实性,本文就来介绍一下Spring Security添加二次认证的项目实践,具有一定的参考价值,感兴趣的可以了解一下
    2023-12-12
  • Mybatis 级联删除的实现

    Mybatis 级联删除的实现

    这篇文章主要介绍了Mybatis 级联删除的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • ElasticSearch6.2.3+head插件安装的方法步骤

    ElasticSearch6.2.3+head插件安装的方法步骤

    这篇文章主要介绍了ElasticSearch6.2.3+head插件安装的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-02-02
  • Java调用Docx4j库玩转Word文档处理

    Java调用Docx4j库玩转Word文档处理

    在 Java 开发里处理 Word 文档时,Docx4j 可是个超厉害的库,它能让咱轻松创建,读取,修改和转换 Word 文档,下面我们就来看看具体是如何操作的吧
    2025-02-02
  • java中的 HashMap 的加载因子是0.75原理探讨

    java中的 HashMap 的加载因子是0.75原理探讨

    在Java中,HashMap是一种常用的数据结构,用于存储键值对,它的设计目标是提供高效的插入、查找和删除操作,在HashMap的实现中,加载因子(Load Factor)是一个重要的概念,本文将探讨为什么Java中的HashMap的加载因子被设置为0.75
    2023-10-10
  • 详细学习Java Cookie技术(用户登录、浏览、访问权限)

    详细学习Java Cookie技术(用户登录、浏览、访问权限)

    这篇文章主要为大家详细介绍了Java Cookie技术,显示用户上次登录的时间、显示用户最近浏览的若干个图片(按比例缩放)等,感兴趣的小伙伴们可以参考一下
    2016-08-08
  • 详解Java字符串在内存中的存储位置

    详解Java字符串在内存中的存储位置

    这篇文章主要介绍了Java字符串在内存中的存储位置,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-05-05
  • java阶乘计算获得结果末尾0的个数代码实现

    java阶乘计算获得结果末尾0的个数代码实现

    今天偶然看到一个要求,求1000~10000之间的数n的阶乘并计算所得的数n!末尾有多少个0?要求: 不计算 只要得到末尾有多少个0就可以了,看下面的代码吧
    2013-12-12
  • 简单了解JAVA构造方法

    简单了解JAVA构造方法

    构造方法作用就是对类进行初始化。 如果你没有定议任何构造方法的形式,程式会为你取一个不带任何参数的构造函数,那么你产生类的对像时只能用不带参数的方法.下面小编和大家来一起学习一下吧
    2019-06-06

最新评论