C#实现XLS与XLSX格式双向互转(无需依赖 Office)

 更新时间:2026年04月23日 08:28:00   作者:Eiceblue  
不同系统,老旧业务终端,第三方导出工具常生成不同后缀的表格文件,因此 XLS 与 XLSX 互相转换成为后端开发中的高频需求,本文将讲解如何使用 C# 快速完成双向格式转换,不依赖本地安装 Office 套件,希望对大家有所帮助

日常 .NET 项目开发、数据对接、报表归档中,经常遇到新旧 Excel 格式不兼容的问题。XLS(Excel 97-2003)为二进制格式,兼容性广但单文件数据容量有限;XLSX(Excel 2007+)为开放式 XML 格式,体积更小、扩展性更强。

不同系统、老旧业务终端、第三方导出工具常生成不同后缀的表格文件,因此 XLS 与 XLSX 互相转换成为后端开发中的高频需求。本文将讲解如何使用 C# 快速完成双向格式转换,不依赖本地安装 Office 套件。

一、技术方案选型

原生 .NET 缺少直接解析、转换 Excel 新旧格式的内置 API。传统方案大多依赖 Office Interop 组件,存在以下弊端:

  • 必须在服务器/运行环境安装微软 Office,部署成本高
  • 进程容易残留,长期运行易造成内存泄漏
  • 权限配置复杂,容器化、Linux 环境无法适配

因此,本文采用轻量级第三方免费 Excel 处理类库,以独立解析引擎完成表格读取与另存导出,仅引入基础 NuGet 包,无额外环境依赖,代码轻量化、可直接集成至控制台、WinForm、ASP.NET 各类项目。

安装方式

通过 NuGet 包管理器安装:

Install-Package FreeSpire.XLS

免费版限制:Free Spire.XLS 在读写 XLS 格式时,每个工作簿最多处理 5 个工作表,且每个工作表最多 200 行数据。使用时需注意此限制,避免内容被截断。

二、了解 XLS 与 XLSX 的本质差异

特性XLS (97-2003)XLSX (2007+)
底层格式二进制复合文档 (BIFF)ZIP 压缩包 + XML
最大行数65,5361,048,576
最大列数256 (IV)16,384 (XFD)
工作表最大数量约 255无硬性限制(受内存限制)
单元格字符数32,76732,767
颜色支持56 色调色板1600 万色(24位)
条件格式有限丰富
图表传统图表新图表引擎
数据透 视表支持增强版

由于旧格式的限制,XLSX → XLS 转换时,复杂图表、单元格样式、新公式等可能会丢失或降级。建议转换前对关键数据进行复核。

三、XLS 转 XLSX(旧格式转新格式)

加载旧版 XLS 文件,通过指定高版本 ExcelVersion 枚举,另存为 XLSX 格式。

using Spire.Xls;
using System;

namespace ConvertXlsToXlsx
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                // 1. 创建 Workbook 对象
                using (Workbook workbook = new Workbook())
                {
                    // 2. 加载 .xls 文件
                    workbook.LoadFromFile("Input.xls");

                    // 3. 转换为 .xlsx 并保存
                    workbook.SaveToFile("ToXlsx.xlsx", ExcelVersion.Version2016);
                }

                Console.WriteLine("转换完成!");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"转换失败:{ex.Message}");
            }
        }
    }
}

说明ExcelVersion 枚举提供了多种版本,如 Version97to2003(.xls)、Version2010Version2013Version2016 等。保存为 .xlsx 时推荐选最新版本,兼容性最好。。

四、XLSX 转 XLS(新格式转旧格式)

针对仅能识别 XLS 格式的老旧系统,将新版表格向下兼容转换。代码逻辑与反向转换一致,仅修改导出版本参数。

using Spire.Xls;
using System;

namespace ConvertXlsxToXls
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                using (Workbook workbook = new Workbook())
                {
                    workbook.LoadFromFile("Input.xlsx");
                    workbook.SaveToFile("ToXls.xls", ExcelVersion.Version97to2003);
                }

                Console.WriteLine("转换完成!");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"转换失败:{ex.Message}");
            }
        }
    }
}

五、批量转换与文件夹处理

实际项目中常需批量转换整个目录下的 Excel 文件。以下示例支持将指定文件夹内所有 .xls 转为 .xlsx(反之类似)。

批量 XLS → XLSX 示例

using Spire.Xls;
using System;
using System.IO;

namespace BatchConvert
{
    class Program
    {
        static void Main(string[] args)
        {
            string sourceFolder = @"C:\ExcelFiles\XlsFiles";
            string destFolder = @"C:\ExcelFiles\XlsxFiles";

            if (!Directory.Exists(destFolder))
                Directory.CreateDirectory(destFolder);

            foreach (string xlsFile in Directory.GetFiles(sourceFolder, "*.xls"))
            {
                string fileName = Path.GetFileNameWithoutExtension(xlsFile);
                string xlsxPath = Path.Combine(destFolder, fileName + ".xlsx");

                try
                {
                    using (Workbook workbook = new Workbook())
                    {
                        workbook.LoadFromFile(xlsFile);
                        workbook.SaveToFile(xlsxPath, ExcelVersion.Version2016);
                    }
                    Console.WriteLine($"已转换: {xlsFile} → {xlsxPath}");
                }
                catch (Exception ex)
                {
                    Console.WriteLine($"转换失败 {xlsFile}: {ex.Message}");
                    // 可将错误写入日志文件
                }
            }

            Console.WriteLine("批量转换完成!");
        }
    }
}

类似地,将 *.xlsx 转为 *.xls 只需调整搜索模式与保存版本。

六、总结

C# 实现 XLS/XLSX 互转仅需 3 行核心代码:

创建 Workbook → 加载文件 → 指定版本保存

本文提供的代码可直接复制到项目中,稍作路径修改即可运行。无论是单个文件转换还是批量处理,这套方案均稳定高效。若需处理更复杂的 Excel 场景(如修改单元格、生成图表),该库的 API 同样可以满足。

到此这篇关于C#实现XLS与XLSX格式双向互转(无需依赖 Office)的文章就介绍到这了,更多相关C# XLS与XLSX互转内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C#实现批量压缩和解压缩的示例代码

    C#实现批量压缩和解压缩的示例代码

    这篇文章主要为大家详细介绍了如何利用C#实现批量压缩和解压缩的功能,文中的示例代码讲解详细,对我们学习C#有一定的帮助,感兴趣的小伙伴可以跟随小编一起了解一下
    2022-12-12
  • C# winfrom 模拟ftp文件管理实现代码

    C# winfrom 模拟ftp文件管理实现代码

    从网上找到的非常好用的模拟ftp管理代码,整理了一下,希望对需要的人有帮助
    2014-01-01
  • 利用C#守护Python进程的方法

    利用C#守护Python进程的方法

    这篇文章主要给大家介绍了关于如何利用C#守护Python进程的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用C#具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-10-10
  • C#实现MySQL中Clickhouse建表语句的转换工具

    C#实现MySQL中Clickhouse建表语句的转换工具

    这篇文章主要为大家详细介绍了如何使用C#实现MySQL中Clickhouse建表语句的转换工具,文中的示例代码简洁易懂,有需要的小伙伴可以跟随小编一起学习一下
    2025-10-10
  • C#日期格式化的几个要点小结

    C#日期格式化的几个要点小结

    本文将介绍C#日期格式化的几个要点,包括标准 DateTime 格式字符串。希望大家能从中得到更多的理解和帮助
    2013-09-09
  • C#实现将文件转换为XML的方法

    C#实现将文件转换为XML的方法

    这篇文章主要介绍了C#实现将文件转换为XML的方法,实例分析了office文件与xml的相互转换技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-12-12
  • C# WinForms存储过程操作数据库的实例讲解

    C# WinForms存储过程操作数据库的实例讲解

    这篇文章主要介绍了C# WinForms存储过程操作数据库的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-04-04
  • C#实现六大设计原则之接口隔离原则

    C#实现六大设计原则之接口隔离原则

    这篇文章介绍了C#实现六大设计原则之接口隔离原则的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-02-02
  • C#与C++动态链接库DLL参数互传方式

    C#与C++动态链接库DLL参数互传方式

    这篇文章主要介绍了C#与C++动态链接库DLL参数互传方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • 如何利用Jenkins + TFS为.Net Core实现持续集成/部署详解

    如何利用Jenkins + TFS为.Net Core实现持续集成/部署详解

    这篇文章主要给大家介绍了关于如何利用Jenkins + TFS为.Net Core实现持续集成/部署的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2018-05-05

最新评论