C#教程

关注公众号 jb51net

关闭
首页 > 软件编程 > C#教程 > C#提取Word表格数据

C#结合Spire.Doc实现自动化提取Word表格数据

作者:咕白m625

在日常办公和开发中,我们经常需要从Word文档中提取表格数据进行二次处理,下面我们就来看看C#如何结合Spire.Doc库实现Word表格的提取并将提取的内容保存为文本文件吧

在日常办公和开发中,我们经常需要从Word文档中提取表格数据进行二次处理(如导入数据库、数据分析等)。本文将介绍如何使用C#结合Spire.Doc库实现Word表格的提取,并将提取的内容保存为文本文件。

工具与环境准备

要实现Word表格提取,我们需要以下工具和组件:

Spire.Doc 是一个功能强大的Word文档处理库,支持读取、编辑、生成Word文档,尤其对表格、段落等元素的处理非常便捷。我们可以通过 NuGet 包管理器安装它:在项目中右键“管理NuGet包”,搜索 “Spire.Doc” 并安装。

如何通过 C# 提取 Word 表格

实现思路

从Word中提取表格的核心思路是“逐层解析文档结构”:

完整代码

以下是提取Word表格的完整代码,我们将逐步解析其核心逻辑:

using Spire.Doc;
using Spire.Doc.Collections;
using Spire.Doc.Interface;
using System.IO;
using System.Text;

namespace ExtractWordTable
{
    internal class Program
    {
        static void Main(string[] args)
        {
            // 创建文档对象
            Document doc = new Document();
            // 加载Word文档
            doc.LoadFromFile("Tables.docx");

            // 遍历文档中的所有节
            for (int sectionIndex = 0; sectionIndex < doc.Sections.Count; sectionIndex++)
            {
                Section section = doc.Sections[sectionIndex];

                // 获取当前节中的所有表格
                TableCollection tables = section.Tables;

                // 遍历当前节中的所有表格
                for (int tableIndex = 0; tableIndex < tables.Count; tableIndex++)
                {
                    ITable table = tables[tableIndex];

                    // 用于存储当前表格的所有数据
                    string tableData = "";

                    // 遍历表格中的所有行
                    for (int rowIndex = 0; rowIndex < table.Rows.Count; rowIndex++)
                    {
                        TableRow row = table.Rows[rowIndex];
                        // 遍历行中的所有单元格
                        for (int cellIndex = 0; cellIndex < row.Cells.Count; cellIndex++)
                        {
                            TableCell cell = row.Cells[cellIndex];

                            // 提取单元格文本(单元格可能包含多个段落)
                            string cellText = "";
                            for (int paraIndex = 0; paraIndex < cell.Paragraphs.Count; paraIndex++)
                            {
                                cellText += (cell.Paragraphs[paraIndex].Text.Trim() + " ");
                            }

                            // 拼接单元格文本,用制表符分隔不同单元格
                            tableData += cellText.Trim();
                            if (cellIndex < row.Cells.Count - 1)
                            {
                                tableData += "\t";
                            }
                        }

                        // 行结束后换行
                        tableData += "\n";
                    }

                    // 保存表格数据到文本文件)
                    string filePath = Path.Combine("Tables", $"Section{sectionIndex + 1}_Table{tableIndex + 1}.txt");
                    File.WriteAllText(filePath, tableData, Encoding.UTF8);
                }
            }

            doc.Close();
        }
    }
}

代码核心逻辑解析

1. 遍历文档结构

Word 文档的结构是“文档(Document)→ 节(Section)→ 表格(Table)→ 行(Row)→ 单元格(Cell)”,因此我们需要逐层遍历:

2. 提取单元格文本

单元格(TableCell)中的内容可能包含多个段落(Paragraph),因此需要遍历所有段落并拼接文本:

string cellText = "";
for (int paraIndex = 0; paraIndex < cell.Paragraphs.Count; paraIndex++)
{
    cellText += (cell.Paragraphs[paraIndex].Text.Trim() + " ");
}

使用 Trim() 去除文本前后的空白,避免多余空格影响格式。

实用扩展方向

基于本文代码,可进一步扩展功能,满足更多场景需求:

通过上述方法,我们可以高效地从 Word 文档中提取表格数据,为后续的数据处理提供便利。相比原生 Office Interop,Spire.Doc 无需依赖 Office 客户端,运行更轻量化;代码逻辑清晰,可直接复用或二次开发。

到此这篇关于C#结合Spire.Doc实现自动化提取Word表格数据的文章就介绍到这了,更多相关C#提取Word表格数据内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文