C#实现Word转Excel的两种实用方法分享
借助Spire.Docfor.NET,可在不安装Office的情况下实现Word转Excel。全局转换直接将整份文档输出为一个工作表,适合快速迁移;表格精准提取则遍历文档中的每个表格,分别存入独立工作表,便于分类处理。
引言
在实际项目里头,经常碰到这种需求:客户发来一份 Word 报告,里面有好几个数据表格,或者整篇文档需要转成 Excel 做进一步处理。要是手动复制粘贴,不仅慢,还容易出错。借助 Spire.Doc for .NET 这个库,可以在不安装 Microsoft Office 的前提下,用少量代码把这事儿搞定。
这次就分享两种转换思路:
- 极简全局转换:把整个 Word 文档直接转成一个 Excel 工作表,适合快速迁移。
- 表格精准提取:把 Word 里的每个表格单独拎出来,各占一个 Excel 工作表,方便数据分类。
环境准备
通过 NuGet 安装 Spire.Doc 包,命令行敲一行就行:
Install-Package Spire.Doc
这个库同时支持 .doc 和 .docx 两种格式,转换输出是 .xlsx。
方法一:直接把整个 Word 文档保存成 Excel
如果希望把 Word 文档里的所有内容——段落文字、表格、图片这些——按原有顺序一股脑儿输出到一个 Excel 工作表中,直接用 Document.Sa veToFile 方法,指定 FileFormat.XLSX 就行。
这个方案最简洁,核心代码就两行,一加载一保存,完事儿。
using Spire.Doc;
namespace WordToExcel
{
class Program
{
static void Main(string[] args)
{
// 加载 Word 文档
Document document = new Document();
document.LoadFromFile(@"F:\实验.docx");
// 直接保存为 Excel 文件
document.Sa veToFile(@"F:\输出.xlsx", FileFormat.XLSX);
// 释放资源
document.Dispose();
}
}
}
这里面发生了什么?
- 段落被转成 Excel 单元格中的文本,自动换行会保留下来。
- 表格直接映射为 Excel 里的单元格区域,结构和内容都保留。
- 图片会放在对应行的单元格里,位置基本不走样。
什么时候用这个方法?
- 文档排版比较规整,比如线性段落加简单表格,没什么复杂布局。
- 只是临时一次性转换,不要求每个表格单独占据一个工作表。
- 文档里除了表格还有不少说明文字,需要一并保留。

得留个心:
- 转换后的 Excel 只有一个工作表,所有内容按顺序往下排列。
- 如果文档里有复杂排版——比如多栏、文本框、浮动对象——可能出现位置偏差,得手动微调。
方法二:把每个 Word 表格导出为独立工作表
很多实际场景是这样:Word 里有好几个表格,比如“1月销售表”、“2月销售表”、“客户名单”,希望每个表格分别放在 Excel 的不同工作表里,方便后面用透视表分析。
直接保存做不到这一点,不过我们可以遍历文档的节和表格,为每个表格创建一个临时节(Section),再把临时文档保存成 Excel 就行了。
原理很简单:Spire.Doc 在保存为 Excel 时,会把文档中的每一个 节(
Section) 转成 Excel 中的一个工作表。
using Spire.Doc;
class Program
{
static void Main()
{
// 加载源 Word 文档
Document doc = new Document();
doc.LoadFromFile(@"F:\表格.docx");
// 创建临时文档,用来存放提取的表格
Document tempDoc = new Document();
// 遍历源文档的所有节
foreach (Section section in doc.Sections)
{
// 遍历当前节中的所有表格
foreach (Table table in section.Tables)
{
// 为每个表格创建新节(每个节最终对应一个工作表)
Section tempSec = tempDoc.AddSection();
// 克隆表格并添加到新节中
tempSec.Tables.Add(table.Clone());
}
}
// 保存为 Excel 文件
tempDoc.Sa veToFile("Word表格.xlsx", FileFormat.XLSX);
doc.Dispose();
tempDoc.Dispose();
}
}
代码说明:
- 通过两层
foreach,一层遍历节,一层遍历节里的表格,能抓到所有表格。 table.Clone()做深拷贝,不伤原文档结构。- 临时文档每加一个
Section,最终 Excel 里就多一个工作表。工作表名称默认是 Sheet1、Sheet2…… - 临时文档里只放表格,原文档里的段落文字不会被带过来。
什么时候用这个方法?
- Word 文档里有多个结构相同或不同的表格,需要分别导出到不同工作表。
- 希望每个表格独立成页,方便数据分析或生成报表。
- 只关心表格数据,文档里的描述性文字可以忽略。

两种方法怎么选?对比与建议
| 需求 | 推荐方法 |
|---|---|
| 快速把整份 Word 转成 Excel,保留原样 | 直接保存(方法一) |
| 提取所有表格,每个表格一个工作表 | 表格拆分(方法二) |
| 只需要部分表格(比如只导出前10个) | 方法二里加上 break 或 continue 判断 |
两种方法的核心都是 Sa veToFile(..., FileFormat.XLSX),区别在于准备文档内容的方式不同。方法一直接转换原文档,省心省力;方法二通过创建临时文档、提取表格并分节再转换,灵活度更高。
结语
这次介绍了在 C# 里把 Word 文档转成 Excel 的两种实用方式。整体转换方式代码极简,适合快速迁移整份文档;表格拆分方式则能灵活地把每个表格放进独立的工作表,满足数据分类处理的需求。开发者可以根据实际业务场景选择合适的方法,结合节与工作表的映射关系,进一步定制输出结构。
两种方法都不依赖 Microsoft Office 组件,可以轻松集成到 Windows 服务、控制台应用或 Web 后端中,实现稳定高效的文档格式转换。


































