您好,登录后才能下订单哦!
在日常工作中,我们经常会遇到需要将Excel文件中的多个工作表拆分为单独文件的需求。手动操作虽然可行,但当工作表数量较多时,效率低下且容易出错。通过编写C#或VB.NET代码,我们可以自动化这一过程,大大提高工作效率。本文将详细介绍如何通过C#/VB.NET代码将Excel工作表拆分为单独的文件。
在开始编写代码之前,我们需要准备以下工具和库:
在Visual Studio中,打开NuGet包管理器控制台,输入以下命令安装EPPlus库:
Install-Package EPPlus
在Visual Studio中创建一个新的C#或VB.NET控制台应用程序项目。我们将在这个项目中编写代码来实现Excel工作表的拆分。
首先,我们需要引入必要的命名空间:
using OfficeOpenXml;
using System.IO;
接下来,我们需要加载要拆分的Excel文件。假设文件路径为input.xlsx
:
string inputFilePath = "input.xlsx";
FileInfo fileInfo = new FileInfo(inputFilePath);
using (ExcelPackage package = new ExcelPackage(fileInfo))
{
ExcelWorkbook workbook = package.Workbook;
// 接下来的代码将在这里编写
}
我们可以通过遍历工作簿中的所有工作表,并将每个工作表保存为一个单独的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);
}
}
将上述代码整合在一起,完整的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);
}
}
}
}
}
如果你使用的是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
将代码编译并运行后,程序会读取input.xlsx
文件,并将其中的每个工作表保存为单独的Excel文件,文件名与工作表名相同。
除了基本的拆分功能,我们还可以扩展代码以实现以下功能:
可以通过命令行参数或配置文件指定要拆分的工作表名称:
List<string> sheetsToSplit = new List<string> { "Sheet1", "Sheet2" };
foreach (ExcelWorksheet worksheet in workbook.Worksheets)
{
if (sheetsToSplit.Contains(worksheet.Name))
{
// 拆分逻辑
}
}
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;
可以通过遍历目录中的所有Excel文件,并逐个处理:
string inputDirectory = "input_directory";
foreach (string filePath in Directory.GetFiles(inputDirectory, "*.xlsx"))
{
// 处理每个文件
}
通过C#/VB.NET代码将Excel工作表拆分为单独的文件,不仅可以提高工作效率,还可以减少人为错误。本文详细介绍了如何使用EPPlus库实现这一功能,并提供了扩展功能的思路。希望本文对你有所帮助,祝你在编程的道路上越走越远!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。