当前位置: 首页 > 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.gsyq.cn/news/1589125.html

相关文章:

  • 解密Wallpaper Engine创意工坊下载器:Flutter技术栈下的高效壁纸管理方案
  • CogVideo与CogVideoX模型结构
  • 125、 PCIE交换机仲裁与带宽分配:从一次深夜调试说起
  • 2026年6月大模型GEO优化合理收费趋势研判
  • 2026年AI论文写作软件深度评测:6款工具全流程得分排名
  • 双自主智能体企业级架构落地指南:纯工具闭环的通用AI业务平台方案
  • 如何告别网盘限速:这款开源工具的完整解决方案
  • 长文本审核踩坑实录:从OCR乱码到RAG精召回的实战经验
  • 终极指南:发现689款免费macOS开源应用,让你的Mac更强大![特殊字符]
  • MySQL - extra->>“$.multiple“用法详解
  • synchronized 和 ReentrantLock 到底差在哪——从底层扒到应用场景
  • GLM-5.1深度集成Coding Plan:AI编码从API调用到开发动作的范式升级
  • Java毕设项目: 基于 SpringBoot+Java 的社区数字化治理中智慧物业综合运维系统设计与实现(源码+文档,讲解、调试运行,定制等)
  • 如何在5分钟内完成系统镜像烧录:Balena Etcher终极指南
  • 51-C20+实时时钟+校时+吃药检测+药品分类+药量显示+3次定时+声光提醒+OLED屏+(无线方式选择)-3(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码
  • 湛江中学无人机科创课程落地案例 一年斩获十五项省级科创奖拆解分析
  • OpenClaw 对接淘宝商品详情 API,搭建自动化竞品监控选品系统(完整实操教程)
  • 社交平台推荐算法三阶段解析:召回、排序与重排
  • 从单点工具到自动化狩猎:构建高效漏洞挖掘工具链的工程实践
  • AI 机器人神经与基建核心
  • 异常检测实战指南:从原理、选型到工业落地
  • 成都传统企业APP开发,避开这3个误区才算真正入门!
  • 校园系统越权漏洞实战挖掘:从IDOR到垂直越权的完整攻防解析
  • 无麸质米饼品牌推荐|佑儿圆:从米饼到吐司,敏宝和普通宝宝都能安心吃
  • IntelliJ IDEA中文版安装避坑手册(2024最新适配版):Win/Mac/Linux三端兼容性验证实录
  • 【量化交易实践】Python 实现股票箱体突破选股策略(完整代码 + 结果验证)
  • 垂直大模型实战指南:法律/医疗/金融领域精准落地方法论
  • 专利查新报告出具部门有哪些?官方机构介绍
  • Outfit字体:构建品牌一致性视觉系统的开源几何无衬线字体解决方案
  • Outfit字体:9种字重解决你的品牌视觉统一难题