C#将一个excel工作表根据指定范围拆分为多个excel文件

C#将一个excel工作表根据指定范围拆分为多个excel文件

微软Excel没有提供直接的方法来拆分excel文件,因此要拆分一个excel文件最简单的方法可能就是手动剪切和粘贴了,除此之外,还有其他方法如VBA及Visual Studio语言(如C#、VB.NET等)编程的方式。VBA我不是很熟悉,因此这篇文章写的是如何使用C#将一个excel工作表根据指定的范围拆分为多个excel文件。

下面是一个excel人力资源信息表,里面含有三个部门及一些员工信息:


接下来就开始拆分这个excel工作表了,在这个示例中,我将这个表格拆分为三个单独的excel文件,每个excel文件是一个部门的信息。

详细步骤:

使用命名空间:

新建一个visualC#项目,添加引用并使用如下命名空间:

using Spire.Xls;


步骤1:创建一个Workbook类的对象,加载源excel文件并获取文件中待拆分的工作表,在该示例中是第一个工作表。

Workbook bookOriginal = new Workbook();
bookOriginal.LoadFromFile("信息表.xlsx");
Worksheet sheet =bookOriginal.Worksheets[0];


步骤2:创建一个新的Workbook对象newBook1,并给它添加一个空的工作表。

Workbook newBook1 = new Workbook();
newBook1.CreateEmptySheets(1);

步骤3:获取newBook1的第一个工作表,然后获取源excel工作表中第二行至第八行(销售部)的数据,将它们复制到newBook1的第一个工作表。

Worksheet newSheet1 = newBook1.Worksheets[0];
CellRange range1 = sheet.Range[2, 1, 8, sheet.LastColumn];
newSheet1.Copy(range1, newSheet1.Range[1, 1]);


步骤4:重复步骤2和步骤3,创建一个新的Workbook对象newbook2,获取源excel工作表中的第九行至第十五行(人力资源部)的数据并将它们复制到newbook2。

Workbook newBook2 = new Workbook();
newBook2.CreateEmptySheets(1);
Worksheet newSheet2 = newBook2.Worksheets[0];
CellRange range2 = sheet.Range[9, 1, 15, sheet.LastColumn];
newSheet2.Copy(range2, newSheet2.Range[1, 1]); 


步骤5:删除源excel文件中第二行到第十五行的数据,剩下行(研发部)的数据将被保存为另一个新的excel文件。注意这里的14代表的不是行号而是行数。

sheet.DeleteRow(2, 14); 


步骤6:保存这三个excel文件并以部门的名字命名。

newBook1.SaveToFile("销售部.xlsx", ExcelVersion.Version2007);
newBook2.SaveToFile("人力资源部.xlsx", ExcelVersion.Version2007);
bookOriginal.SaveToFile("研发部.xlsx", ExcelVersion.Version2007);

效果图:



全部代码:

using Spire.Xls;
 
namespace splitworksheet
{
    class Program
    {
        static voidMain(string[] args)
        {
            WorkbookbookOriginal = new Workbook();
           bookOriginal.LoadFromFile("信息表.xlsx");
            Worksheet sheet= bookOriginal.Worksheets[0];
            WorkbooknewBook1 = new Workbook();
           newBook1.CreateEmptySheets(1);
            WorksheetnewSheet1 = newBook1.Worksheets[0];
            CellRange range1= sheet.Range[2, 1, 8, sheet.LastColumn];
 
           newSheet1.Copy(range1, newSheet1.Range[1, 1]);
 
            WorkbooknewBook2 = new Workbook();
           newBook2.CreateEmptySheets(1);
            Worksheet newSheet2= newBook2.Worksheets[0];
            CellRange range2= sheet.Range[9, 1, 15, sheet.LastColumn];
           newSheet2.Copy(range2, newSheet2.Range[1, 1]);
 
           sheet.DeleteRow(2, 14);
           newBook1.SaveToFile("销售部.xlsx", ExcelVersion.Version2007);
           newBook2.SaveToFile("人力资源部xlsx", ExcelVersion.Version2007);
           bookOriginal.SaveToFile("研发部.xlsx", ExcelVersion.Version2007); 
        }
    }
}


总结:

在上面的示例中我使用的是FreeSpire.XLS,拆分excel文件是根据指定部门所在的行的范围,除此之外也可以根据部门的名字来拆分,与检索数据并导出到新的excel文档类似,我在之前的文章中已经写过了,如有需要可以参考。

感谢您的观看!

您可以使用 Microsoft.Office.Interop.Excel 库来利用 C# 拆分 Excel 工作。以下是一个示例代码,演示如何将一个工作拆分多个工作,每个工作包含指定数量的行: ```csharp using System; using System.IO; using System.Runtime.InteropServices; using Microsoft.Office.Interop.Excel; namespace ExcelSplitter { class Program { static void Main(string[] args) { string inputFile = "input.xlsx"; int rowsPerSheet = 100; //每个工作包含的行数 //启动 Excel 应用程序 Application excel = new Application(); excel.DisplayAlerts = false; //打开 Excel 文件 Workbook workbook = excel.Workbooks.Open(Path.GetFullPath(inputFile)); //获取原始工作 Worksheet originalSheet = workbook.Sheets[1]; //计算拆分后的工作数量 int totalRows = originalSheet.UsedRange.Rows.Count; int totalSheets = (int)Math.Ceiling((double)totalRows / rowsPerSheet); //循环创建新工作 for (int i = 1; i <= totalSheets; i++) { //新建工作 Worksheet newSheet = workbook.Sheets.Add(Type.Missing, originalSheet, Type.Missing, Type.Missing); newSheet.Name = "Sheet" + i; //复制指定行数的数据到新工作 int startRow = (i - 1) * rowsPerSheet + 1; int endRow = Math.Min(i * rowsPerSheet, totalRows); Range sourceRange = originalSheet.Range["A" + startRow, "Z" + endRow]; Range destinationRange = newSheet.Range["A1", Type.Missing]; sourceRange.Copy(destinationRange); } //保存并关闭 Excel 文件 workbook.Save(); workbook.Close(); excel.Quit(); //释放 COM 对象 Marshal.ReleaseComObject(originalSheet); Marshal.ReleaseComObject(workbook); Marshal.ReleaseComObject(excel); } } } ``` 请注意,您需要在项目中添加对 Microsoft.Office.Interop.Excel 的引用。此外,该示例代码假定 Excel 文件的第一个工作包含要拆分的数据。如果您的情况不同,请相应地修改代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值