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

使用 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中提取表格的核心思路是“逐层解析文档结构”:

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

完整代码

以下是提取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 客户端,运行更轻量化;代码逻辑清晰,可直接复用或二次开发。

http://www.dtcms.com/a/597465.html

相关文章:

  • 3DEXPERIENCE DELMIA Role: LTR - Lean Team Player
  • 手机网站seo教程下载wordpress获取文章图片地址
  • 网站海外推广谷歌seo方案开一个网站建设公司需要什么软件
  • 基于 Vue3 封装大华 RTSP 回放视频组件(PlayerControl.js 实现)
  • 微服务架构核心概念速查手册
  • 跨端框架对决:React Native vs Flutter深度对比
  • Flutter for HarmonyOS开发指南(五):性能调优与性能分析全攻略
  • 直接用 JavaScript 给输入框赋值,Vue 页面input只是纯展示 并 没有触发 vue 的v-model 赋值
  • 2025年Flutter与React Native对比
  • Flutter for HarmonyOS开发指南(七):插件开发与平台能力桥接
  • access网站开发ui工程师工资一般多少
  • 动漫制作专业认知完整的网站优化放啊
  • (113页PPT)西门子制造业研发工艺协同平台及制造平台整体规划(附下载方式)
  • 成功案例丨平衡性能与安全的仿真:Altair助力 STARD 优化赛车空间车架设计
  • 购物商城网站开发目的文档国内最开放的浏览器
  • 专业沈阳网站制作微信电脑版下载官网
  • 36.优化方法
  • 手写self-attention的三重境界
  • 功能安全/ASPICE合规保障:高效模型测试驱动零缺陷开发
  • k8s DaemonSet 控制器从原理到实践
  • 睢宁做网站公司WordPress同步某个表
  • Note:高电压工况下温度测量:挑战与应对策略全解析
  • PostgreSQL 实战分析:UPDATE 语句性能异常与缓存击穿诊断
  • java接口自动化之allure本地生成报告
  • 基于spring boot房屋租赁管理系统的设计与实现
  • Android中使用SQLCipher加密GreenDao数据库不成功
  • AI泡沫量化预警:基于多因子模型的1999年互联网泡沫历史回溯与风险映射
  • 网站建设多少钱一个平台wordpress 查看菜单
  • 网站导航设置婚恋网站建设教程
  • 黑马JAVAWeb - Maven高级-分模块设计与开发-继承-版本锁定-聚合-私服