使用 C# 将 Excel 工作表拆分为多个文件
Source: Dev.to
(请提供您想要翻译的文章正文内容,我将为您翻译成简体中文并保留原始的格式、代码块和链接。)
介绍
在现代数据处理工作流中,将包含多个工作表的 Excel 文件拆分为单个工作表文件是一项普遍需求——无论是用于分发部门特定的财务报告、共享班级特定的学生成绩单,还是组织分段数据集。手动拆分既繁琐又耗时,而且容易出现人为错误,导致数据不一致。
使用 C# 自动化此过程是提升生产力的最佳方案,而 Free Spire.XLS——一款轻量级且功能强大的 .NET 库——让这一切变得前所未有的简单,并且 无需安装 Microsoft Office。
本指南将带您完整了解使用 C# 和 Free Spire.XLS 拆分 Excel 工作表的整个过程。我们将涵盖:
- 项目设置
- 核心代码实现
- 高级用例
- 替代库
技术栈概览
- 语言: C#
- 框架: .NET Framework 4.0+、.NET Core 3.1+、.NET 5+
- 库: Free Spire.XLS (NuGet)
- IDE: Visual Studio 2019+、Rider、VS Code,或任何 C# IDE
为什么选择 Free Spire.XLS?
Free Spire.XLS 是一款免费的 .NET Excel 组件,旨在实现无缝的 Excel 文件操作。与传统方案如 Microsoft Office Interop 相比,它提供了三个关键优势:
| 优势 | 描述 |
|---|---|
| 无 Office 依赖 | 在服务器或客户端机器上无需安装 Microsoft Office,即可运行,消除兼容性和授权问题。 |
| 功能丰富 | 支持创建、编辑、转换和拆分 Excel 文件(.xls 与 .xlsx),并完整保留数据、公式、样式和格式。 |
| 高性能 | 为批量处理和服务器端自动化进行优化,在速度和稳定性方面优于 Interop。 |
前置条件
要跟随操作,请确保您的开发环境满足以下要求:
- .NET Framework 4.0+ / .NET Core 3.1+ / .NET 5+
- 免费的 Spire.XLS NuGet 包(建议使用最新版本)
- Visual Studio 2019+ / Rider / VS Code(或任何 C# IDE)
Source: …
步骤式实现
1. 项目设置
-
在 IDE 中创建一个新的 C# 控制台应用 项目。
-
通过 NuGet 安装 Free Spire.XLS:
-
Package Manager Console
Install-Package FreeSpire.XLS -
GUI 方法
右键单击项目 → 管理 NuGet 包 → 搜索 “FreeSpire.XLS” → 安装。
-
2. 核心代码实现(附详细说明)
核心逻辑包括:
- 加载源 Excel 文件。
- 遍历其工作表。
- 将每个工作表复制到新的工作簿。
- 保存新文件。
using Spire.Xls;
using System;
using System.IO;
namespace ExcelWorksheetSplitter
{
class Program
{
static void Main(string[] args)
{
// -------------------------------------------------
// 1️⃣ 配置文件路径(根据你的环境进行更新)
// -------------------------------------------------
string sourceFilePath = "source.xlsx"; // 多工作表 Excel 文件的路径
string outputDirectory = Path.Combine(
Environment.GetFolderPath(Environment.SpecialFolder.Desktop),
"SplitWorksheets");
try
{
// -------------------------------------------------
// 2️⃣ 加载源工作簿
// -------------------------------------------------
using (Workbook sourceWorkbook = new Workbook())
{
sourceWorkbook.LoadFromFile(sourceFilePath);
// -------------------------------------------------
// 3️⃣ 确保输出文件夹存在
// -------------------------------------------------
Directory.CreateDirectory(outputDirectory);
// -------------------------------------------------
// 4️⃣ 遍历所有工作表
// -------------------------------------------------
for (int i = 0; i file.EndsWith(".xlsx") || file.EndsWith(".xls"))
.ToArray();
foreach (string file in excelFiles)
{
Console.WriteLine($"Processing file: {Path.GetFileName(file)}");
SplitSingleExcelFile(file,
Path.Combine(outputFolder, Path.GetFileNameWithoutExtension(file)));
}
}
// 可复用的方法,用于拆分单个 Excel 文件
static void SplitSingleExcelFile(string sourceFilePath, string outputFolder)
{
using (Workbook wb = new Workbook())
{
wb.LoadFromFile(sourceFilePath);
Directory.CreateDirectory(outputFolder);
foreach (Worksheet sheet in wb.Worksheets)
{
using (Workbook newWb = new Workbook())
{
newWb.Worksheets.Clear();
newWb.Worksheets.AddCopy(sheet);
newWb.SaveToFile(
Path.Combine(outputFolder, $"{sheet.Name}.xlsx"),
ExcelVersion.Version2016);
}
}
}
}
替代库(比较)
| 库 | 优点 | 缺点 | 最佳适用场景 |
|---|---|---|---|
| Free Spire.XLS | 无需 Office 依赖,完整格式支持,API 简单易用 | 免费版有一定限制 | 快速开发,服务器端自动化 |
| EPPlus | 开源,轻量,适用于 .xlsx | 不支持 .xls | 简单的 .xlsx 拆分任务 |
| NPOI | 开源,无水印,完整格式支持 | 学习曲线较陡 | 高级 Excel 操作 |
| Microsoft Office Interop | 原生 Office 集成 | 需要安装 Office,在服务器上不稳定 | 仅限桌面应用 |
| ClosedXML | 直观的 API,开源 | 不支持 .xls | 现代 .xlsx 工作流 |
使用 C# 和 Free Spire.XLS 拆分 Excel 工作表是一种直接且高效的方式来自动化重复的数据处理任务。无论您是构建服务器端自动化工具还是桌面应用,Free Spire.XLS 都提供可靠的解决方案,以简化您的 Excel 工作流。