使用 C# 提取 Word 表格数据
在日常办公和开发中,我们经常需要从Word文档中提取表格数据进行二次处理(如导入数据库、数据分析等)。本文将介绍如何使用C#结合Spire.Doc库实现Word表格的提取,并将提取的内容保存为文本文件。
工具与环境准备
要实现Word表格提取,我们需要以下工具和组件:
- 开发环境:Visual Studio(或其他 C# 开发工具)
- .NET Framework/.NET Core(本文代码兼容主流版本)
- 第三方库:Spire.Doc(用于解析 Word 文档结构,处理表格数据)
Spire.Doc 是一个功能强大的Word文档处理库,支持读取、编辑、生成Word文档,尤其对表格、段落等元素的处理非常便捷。我们可以通过 NuGet 包管理器安装它:在项目中右键“管理NuGet包”,搜索“Spire.Doc”并安装。
如何通过 C# 提取 Word 表格
实现思路
从Word中提取表格的核心思路是“逐层解析文档结构”:
- 加载Word文档,获取文档对象
- 遍历文档中的“节(Section)”(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)”,因此我们需要逐层遍历:
- 节(Section):一个Word文档可以包含多个节(如不同的页面设置、分栏等),通过
doc.Sections获取所有节。 - 表格(Table):每个节中可能包含多个表格,通过
section.Tables获取当前节的表格集合。
2. 提取单元格文本
单元格(TableCell)中的内容可能包含多个段落(Paragraph),因此需要遍历所有段落并拼接文本:
string cellText = "";
for (int paraIndex = 0; paraIndex < cell.Paragraphs.Count; paraIndex++)
{cellText += (cell.Paragraphs[paraIndex].Text.Trim() + " ");
}
使用Trim()去除文本前后的空白,避免多余空格影响格式。
实用扩展方向
基于本文代码,可进一步扩展功能,满足更多场景需求:
- 将提取的表格数据导出为 Excel 文件(结合 Spire.XLS 库)
- 对提取的文本进行清洗(如去除特殊符号、格式转换)
- 批量处理多个Word文档(遍历文件夹中的所有.docx文件)
通过上述方法,我们可以高效地从 Word 文档中提取表格数据,为后续的数据处理提供便利。相比原生 Office Interop,Spire.Doc 无需依赖 Office 客户端,运行更轻量化;代码逻辑清晰,可直接复用或二次开发。
