C# 如何实现 Word 转 Excel ?分享两种实用方法

在实际项目里,经常碰到这种需求:客户发来一份 Word 报告,里面有好几个数据表格,或者整篇文档需要转成 Excel 做进一步处理。如果手动复制粘贴,不仅慢,还容易出错,而借助 Spire.Doc for .NET 库都可以在不安装 Microsoft Office 的前提下,通过少量代码实现转换。

本文将分别介绍两种转换方式:

  • 极简全局转换:将整个 Word 文档直接转换为 Excel 单工作表;
  • 表格精准提取:提取 Word 内所有表格,每个表格独立生成一个 Excel 工作表。

环境准备

通过 NuGet 安装 Spire.Doc 包:

powershell 复制代码
Install-Package Spire.Doc

这个库同时支持 .doc.docx 格式,转换到 Excel 时直接输出 .xlsx 格式。


方法一:直接将整个 Word 文档保存为 Excel

如果希望将 Word 文档中的所有内容(包括段落文本、表格、图片等)按原有顺序输出到一个 Excel 工作表中,可以使用 Document.SaveToFile 方法并指定 FileFormat.XLSX

该方案是最简洁的实现方式,仅需核心两行代码即可完成格式转换。

csharp 复制代码
using Spire.Doc;

namespace WordToExcel
{
    class Program
    {
        static void Main(string[] args)
        {
            // 加载 Word 文档
            Document document = new Document();
            document.LoadFromFile(@"F:\实验.docx");

            // 直接保存为 Excel 文件
            document.SaveToFile(@"F:\输出.xlsx", FileFormat.XLSX);

            // 释放资源
            document.Dispose();
        }
    }
}

它做了什么?

  • 文档中的段落会被转换为 Excel 单元格中的文本,自动换行保留。
  • 表格会映射为 Excel 中的单元格区域,保留基本结构和内容。
  • 图片会被放置在对应行的单元格中。

什么情况下用这个方法?

  • 文档排版相对规整(如线性段落、简单表格)。
  • 只是一次性转换,不要求每个表格单独成页。
  • 文档里除了表格还有大段说明文字,需要保留。

生成示例:

注意点

  • 转换后的 Excel 只包含一个工作表,所有内容依次排列。
  • 复杂排版(多栏、文本框、浮动对象)可能出现位置偏差。

方法二:将每个 Word 表格导出为独立工作表

很多实际场景是这样的:Word 里有好几个数据表,比如"1月销售表"、"2月销售表"、"客户名单",你想要的是每个表分别放在 Excel 的不同工作表中,方便后续用透视表分析。

直接保存做不到这一点,但我们可以通过遍历文档的节和表格,为每个表格创建一个临时节(Section),再将临时文档保存为 Excel 来完成。

原理 :Spire.Doc 在保存为 Excel 时,会将文档中的每一个 节(Section 转换为 Excel 中的一个工作表。

csharp 复制代码
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.SaveToFile("Word表格.xlsx", FileFormat.XLSX);
        
        doc.Dispose();
        tempDoc.Dispose();
    }
}

代码说明:

  • 通过两层 foreach 获取每个 Section 中的每个 Table
  • 使用 table.Clone() 进行深拷贝,避免影响原文档结构。
  • 临时文档每添加一个 Section,最终 Excel 中就多一个工作表。工作表名称默认依次为 Sheet1、Sheet2......。
  • 临时文档中只包含表格,不保留段落的普通文本。

什么情况下用这个方法?

  • Word 文档中包含多个结构相同或不同的数据表格,需要分别导出到 Excel 的不同工作表。
  • 希望每个表格独立成页,便于数据分析或生成报表。
  • 忽略文档中的描述性文字,只保留表格数据。

效果图:


两种方法怎么选?对比与建议

需求 推荐方法
快速将整份 Word 转为 Excel,保留原貌 直接保存(方法一)
提取所有表格,每个表格一个工作表 表格拆分(方法二)
只需要部分表格(比如只导出前10个) 方法二里加上 breakcontinue 判断

两种方法的核心都是利用 SaveToFile(..., FileFormat.XLSX),区别在于准备文档内容的方式不同。方法一直接转换原文档,方法二则通过创建临时文档、提取表格并分节再转换。


结语

本文介绍了在 C# 中将 Word 文档转换为 Excel 文件的两种简便方法。整体转换方式代码极简,适合快速迁移整份文档;而表格拆分方式则能够灵活地将每个表格放入独立的工作表,满足数据分类处理的需求。开发者可根据实际业务场景选择合适的方法,并结合节与工作表的映射关系,进一步定制输出结构。

两种方法均无需依赖 Microsoft Office 组件,可以轻松集成到 Windows 服务、控制台应用或 Web 后端中,实现稳定高效的文档格式转换功能。

相关推荐
yunceqing15 分钟前
从Excel调度到TMS平台:物流软件开发避坑清单
大数据·前端·网络·人工智能·excel·推荐算法
什仙21 分钟前
Mathcad Prime 对比 Excel/MATLAB/Mathematica:核心优势速览
excel
快乐的哈士奇21 分钟前
【Next.js实战②】Excel 派送表动态解析:表头识别与 FIELD_ALIASES 映射
前端·javascript·excel
ceclar1231 小时前
C#字节流与字符流
算法·c#·.net
daols881 小时前
vue vxe-table 复制数据到 Excel:支持带表头复制
vue.js·excel·vxe-table
z落落12 小时前
C#WinForm 窗体切换与窗体传值(登录跳转案例)+WinForm 窗体传值(从上往下传、从下往上传)
开发语言·windows·c#
海兰14 小时前
【web应用】Excel 项目数据自动化分析系统(AI 驱动分析)详细设计与部署指南(附源代码)
前端·人工智能·自动化·excel
ytttr87315 小时前
C# 定时数据库备份工具
开发语言·数据库·c#
雪豹阿伟17 小时前
21.Winfrom —— 定时器、日期选择器、进度条、表格、DataTable
c#·上位机·winfrom
z落落17 小时前
C#WinForm控件实战:Panel与单选框动态创建
开发语言·c#