当前位置: 首页 > news >正文

使用 C# 提取 Word 文档中的表格数据

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

  • 开发环境:Visual Studio(2022/2019 等)或任意 C# 开发工具
  • 第三方库:Free Spire.Doc(用于解析 Word 文档结构,处理表格数据)

Free Spire.Doc 是一个免费的 Word 文档处理库,支持读取、编辑、生成 Word 文档,尤其对表格、段落等元素的处理非常便捷。可以通过NuGet 包管理器安装它:

Install-Package FreeSpire.Doc

或者在项目中右键“管理 NuGet 包”,搜索Spire.Doc并安装。

⚠️注意:免费版单文档最多支持 25 个表格,适用于学习、测试和小型业务场景


提取 Word 表格实现思路

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

  1. 加载 Word 文档,获取文档对象
  2. 遍历文档中的“节(Section)”(Word 文档的基本结构单位)
  3. 在每个节中获取表格集合,遍历所有表格
  4. 对每个表格,逐行、逐单元格提取文本内容
  5. 将提取的表格数据按格式(制表符分隔)保存到文本文件

完整代码

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("表格.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(); } } }

代码核心逻辑解析

① 遍历文档结构

Word 文档的逻辑结构是:Document → Section → Table → Row → Cell

  • 节(Section):一个文档可以有多个节(如不同页码格式、页眉页脚的区域)。通过doc.Sections获取。
  • 表格(Table):每个节可以包含多个表格,通过section.Tables获取。

② 提取单元格文本

单元格TableCell内部可能包含多个段落(Paragraph),每个段落可能有不同的格式(加粗、颜色等)。我们只需提取纯文本内容:

  • 遍历cell.Paragraphs,获取每个段落的 Text
  • 使用Trim()去除段落首尾空白,避免多余换行。
  • 多个段落之间用空格连接,保证可读性。

③ 保存为文本文件

  • 每个表格单独保存为一个.txt文件,文件名包含节索引和表格索引,便于区分。
  • 单元格之间用制表符\t分隔,行末添加换行符。这种格式可直接复制到 Excel 中粘贴,或者被其他数据分析工具读取。

实用扩展方向

基于本文代码,可以轻松扩展以下功能:

1. 导出为 Excel 文件(使用 Free Spire.XLS)

using Spire.Xls; // 将 tableData 的二维数组写入 Workbook

2. 批量处理多个 Word 文档

string[] files = Directory.GetFiles(@"C:\Docs", "*.docx"); foreach (string file in files) { doc.LoadFromFile(file); // ... 提取逻辑 }
http://www.jsqmd.com/news/1077188/

相关文章:

  • 【STM32HAL库开发】学习笔记(1)——GPIO
  • 解密Wallpaper Engine创意工坊下载器:Flutter技术栈下的高效壁纸管理方案
  • HACS高级故障诊断与系统优化深度解析:架构级解决方案实战
  • 计算机毕业设计之基于文本挖掘的综艺评论情感分析--LW
  • 操作系统调优
  • 资料丨2026版《医疗器械生产质量管理规范》自查报告
  • MPC8360E PCI总线深度解析:信号时序、事务终止与调试实践
  • Eclipse Cyclone DDS实战:从构建、配置到性能调优的机器人核心中间件指南
  • CogVideo与CogVideoX模型结构
  • 越权漏洞实战挖掘:从原理到案例,掌握水平与垂直越权防御
  • 125、 PCIE交换机仲裁与带宽分配:从一次深夜调试说起
  • 2025年中国AI验布机五强格局深度盘点:从百家争鸣到五强割据,谁在真正解决纺织企业的验布之痛?
  • 计算机毕业设计之基于Java的影视创作论坛的设计与实现
  • 国茂减速机传动轴故障全解析:键槽磨损、轴弯曲、轴颈划伤维修指南
  • MySQL(二)数据定义语言DDL、数值类型、字符串类型、日期时间类型详细讲解
  • PaperXie AI PPT 生成器:网页端一键出稿,学术答辩汇报不用再熬夜排版
  • 荷兰宏观经济运行现状与发展趋势
  • AlienFX Tools深度指南:从灯光控制到系统优化的全面解决方案
  • 2026年6月西安GEO优化公司实力排名
  • 3分钟掌握BilibiliDown:跨平台B站视频下载工具完全指南
  • 2026年6月大模型GEO优化合理收费趋势研判
  • 双自主智能体企业级架构落地指南:纯工具闭环的通用AI业务平台方案
  • 2026年AI论文写作软件深度评测:6款工具全流程得分排名
  • 如何告别网盘限速:这款开源工具的完整解决方案
  • Infoseek品牌公关,数字化全周期守护企业品牌声誉资产
  • 云生集团创始人、CEO李贤威出席上海青年企业家大会,分享云生AI Agent及WorkBP平台全球创新实践
  • 理解k8s源码之scheduler调度框架设计
  • Pyodide终极指南:在浏览器中运行Python的完整解决方案
  • 3个技巧让你彻底掌控Windows窗口:WindowResizer完全攻略
  • 少走弯路:2026年最值得信赖的专业AI论文网站