怎么通过C#/VB.NET代码将Excel工作表拆分为单独的文件

发布时间:2022-10-18 16:50:35 作者:iii
来源:亿速云 阅读:176

怎么通过C#/VB.NET代码将Excel工作表拆分为单独的文件

在日常工作中,我们经常会遇到需要将Excel文件中的多个工作表拆分为单独文件的需求。手动操作虽然可行,但当工作表数量较多时,效率低下且容易出错。通过编写C#或VB.NET代码,我们可以自动化这一过程,大大提高工作效率。本文将详细介绍如何通过C#/VB.NET代码将Excel工作表拆分为单独的文件。

1. 准备工作

在开始编写代码之前,我们需要准备以下工具和库:

安装EPPlus库

在Visual Studio中,打开NuGet包管理器控制台,输入以下命令安装EPPlus库:

Install-Package EPPlus

2. 创建项目

在Visual Studio中创建一个新的C#或VB.NET控制台应用程序项目。我们将在这个项目中编写代码来实现Excel工作表的拆分。

3. 编写代码

3.1 引入命名空间

首先,我们需要引入必要的命名空间:

using OfficeOpenXml;
using System.IO;

3.2 加载Excel文件

接下来,我们需要加载要拆分的Excel文件。假设文件路径为input.xlsx

string inputFilePath = "input.xlsx";
FileInfo fileInfo = new FileInfo(inputFilePath);

using (ExcelPackage package = new ExcelPackage(fileInfo))
{
    ExcelWorkbook workbook = package.Workbook;
    // 接下来的代码将在这里编写
}

3.3 遍历工作表并保存为单独文件

我们可以通过遍历工作簿中的所有工作表,并将每个工作表保存为一个单独的Excel文件:

foreach (ExcelWorksheet worksheet in workbook.Worksheets)
{
    string outputFilePath = Path.Combine(Path.GetDirectoryName(inputFilePath), $"{worksheet.Name}.xlsx");
    FileInfo outputFileInfo = new FileInfo(outputFilePath);

    using (ExcelPackage newPackage = new ExcelPackage())
    {
        ExcelWorksheet newWorksheet = newPackage.Workbook.Worksheets.Add(worksheet.Name);
        newWorksheet.Cells[worksheet.Dimension.Address].Value = worksheet.Cells[worksheet.Dimension.Address].Value;
        newPackage.SaveAs(outputFileInfo);
    }
}

3.4 完整代码

将上述代码整合在一起,完整的C#代码如下:

using OfficeOpenXml;
using System.IO;

class Program
{
    static void Main(string[] args)
    {
        string inputFilePath = "input.xlsx";
        FileInfo fileInfo = new FileInfo(inputFilePath);

        using (ExcelPackage package = new ExcelPackage(fileInfo))
        {
            ExcelWorkbook workbook = package.Workbook;

            foreach (ExcelWorksheet worksheet in workbook.Worksheets)
            {
                string outputFilePath = Path.Combine(Path.GetDirectoryName(inputFilePath), $"{worksheet.Name}.xlsx");
                FileInfo outputFileInfo = new FileInfo(outputFilePath);

                using (ExcelPackage newPackage = new ExcelPackage())
                {
                    ExcelWorksheet newWorksheet = newPackage.Workbook.Worksheets.Add(worksheet.Name);
                    newWorksheet.Cells[worksheet.Dimension.Address].Value = worksheet.Cells[worksheet.Dimension.Address].Value;
                    newPackage.SaveAs(outputFileInfo);
                }
            }
        }
    }
}

3.5 VB.NET代码

如果你使用的是VB.NET,代码类似如下:

Imports OfficeOpenXml
Imports System.IO

Module Module1
    Sub Main()
        Dim inputFilePath As String = "input.xlsx"
        Dim fileInfo As New FileInfo(inputFilePath)

        Using package As New ExcelPackage(fileInfo)
            Dim workbook As ExcelWorkbook = package.Workbook

            For Each worksheet As ExcelWorksheet In workbook.Worksheets
                Dim outputFilePath As String = Path.Combine(Path.GetDirectoryName(inputFilePath), $"{worksheet.Name}.xlsx")
                Dim outputFileInfo As New FileInfo(outputFilePath)

                Using newPackage As New ExcelPackage()
                    Dim newWorksheet As ExcelWorksheet = newPackage.Workbook.Worksheets.Add(worksheet.Name)
                    newWorksheet.Cells(worksheet.Dimension.Address).Value = worksheet.Cells(worksheet.Dimension.Address).Value
                    newPackage.SaveAs(outputFileInfo)
                End Using
            Next
        End Using
    End Sub
End Module

4. 运行代码

将代码编译并运行后,程序会读取input.xlsx文件,并将其中的每个工作表保存为单独的Excel文件,文件名与工作表名相同。

5. 注意事项

6. 扩展功能

除了基本的拆分功能,我们还可以扩展代码以实现以下功能:

6.1 选择性拆分

可以通过命令行参数或配置文件指定要拆分的工作表名称:

List<string> sheetsToSplit = new List<string> { "Sheet1", "Sheet2" };

foreach (ExcelWorksheet worksheet in workbook.Worksheets)
{
    if (sheetsToSplit.Contains(worksheet.Name))
    {
        // 拆分逻辑
    }
}

6.2 格式保留

EPPlus库支持复制单元格的样式、公式等。可以通过以下代码实现格式保留:

newWorksheet.Cells[worksheet.Dimension.Address].Style = worksheet.Cells[worksheet.Dimension.Address].Style;
newWorksheet.Cells[worksheet.Dimension.Address].Formula = worksheet.Cells[worksheet.Dimension.Address].Formula;

6.3 批量处理

可以通过遍历目录中的所有Excel文件,并逐个处理:

string inputDirectory = "input_directory";
foreach (string filePath in Directory.GetFiles(inputDirectory, "*.xlsx"))
{
    // 处理每个文件
}

7. 总结

通过C#/VB.NET代码将Excel工作表拆分为单独的文件,不仅可以提高工作效率,还可以减少人为错误。本文详细介绍了如何使用EPPlus库实现这一功能,并提供了扩展功能的思路。希望本文对你有所帮助,祝你在编程的道路上越走越远!

推荐阅读:
  1. C# / VB.NET 在Word中添加条码、二维码
  2. C#/VB.NET 在Word中怎么添加条码/二维码

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

vb.net excel

上一篇:linux sudo命令的知识点有哪些

下一篇:PathView的属性怎么用

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》