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


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

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

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

                         

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

    详细步骤:

    使用命名空间:

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

    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 void Main(string[] args)
            {
                Workbook bookOriginal = new Workbook();
                bookOriginal.LoadFromFile("信息表.xlsx");
                Worksheet sheet = bookOriginal.Worksheets[0];
                Workbook newBook1 = new Workbook();
                newBook1.CreateEmptySheets(1);
                Worksheet newSheet1 = newBook1.Worksheets[0];
                CellRange range1 = sheet.Range[2, 1, 8, sheet.LastColumn];
    
                newSheet1.Copy(range1, newSheet1.Range[1, 1]);
    
                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]);
    
                sheet.DeleteRow(2, 14);
                newBook1.SaveToFile("销售部.xlsx", ExcelVersion.Version2007);
                newBook2.SaveToFile("人力资源部.xlsx", ExcelVersion.Version2007);
                bookOriginal.SaveToFile("研发部.xlsx", ExcelVersion.Version2007);
            }
        }
    }
    

    总结:

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

    感谢您的观看!

  • 相关阅读:
    sql server登录账户看不到sql server代理和维护计划
    Redis(1.19)redis内存消耗、redis内存优化
    【最佳实践】bat实现自动化运行sql
    Redis(1.18)redis阻塞分析
    某机场网络环境分析
    【js】setInterval是个坑!chrome定时截图保存实现
    【操作系统】CPU中的时间片的概念
    Jeff Atwood:软件工程已死?
    vscode配置 eslint+prettierrc自动格式化vue3、ts、tsx文件
    基于.NET的大型Web站点StackOverflow架构分析
  • 原文地址:https://www.cnblogs.com/Yesi/p/5213624.html
Copyright © 2020-2023  润新知