如何通过C#和VB.NET合并Excel文档

Excel文档作为日常工作中非常实用的文档格式之一,常用于储存、排序或计算数据等。除一般的功能外,我们有时还会对工作表或者工作簿进行特殊操作。例如当同一类型的数据分别储存在多个工作簿或者工作表中,必要时可以将其合并至一个文档或者同一工作表内。Free Spire.XLS for .NET 能够帮我们通过编程的方法轻松实现合并功能。具体的操作步骤及代码请参考以下教程。

 

安装Free Spire.XLS for .NET

方法一:

    通过NuGet安装Free Spire.XLS for .NET,具体步骤为:依次选择工具>NuGet包管理器>程序包管理器控制台,然后执行以下命令:

    PM> Install-Package FreeSpire.XLS         

方法二

    在程序中手动引入Spire.xls.dll文件,将Free Spire.XLS for .NET 下载到本地,解压并安装。安装完成后,打开 Visual Studio创建新项目,在右边的“解决方案资源管理器”中右键点击“引用”,再依次选择“添加引用”> “浏览”,找到安装路径下BIN文件夹中的dll文件,点击“确定”,将其添加引用至程序中。

将多个工作簿合并至一个工作簿

  • 创建 Workbook类的对象,加载源Excel文档。
  • 利用 Workbook.Worksheets 属性和Worksheet.Range属性获取源工作表和源单元格区域。
  • 创建另一个Workbook类的对象以加载目标Excel文档。
  • 获取目标工作表和单元格区域。
  • 使用 Worksheet.Copy(CellRange source, CellRange destRange)方法将数据从源单元格区域复制到目标单元格区域。
  • 将源单元格区域的列宽复制到目标区域,以便数据可以在目标工作簿中正确显示。
  • 使用 Workbook.SaveToFile()方法将目标工作簿保存到Excel文件。

C#:

using Spire.Xls;

namespace MergeExcelFiles
{
    class Program
    {
        static void Main(string[] args)
        {
            //从 Excel 文件路径创建一个字符串数组
            string[] inputFiles = new string[] { "sample1.xlsx", "sample2.xlsx", "sample3.xlsx" };

            //初始化一个新的 Workbook 对象
            Workbook newWorkbook = new Workbook();
            //清除默认工作表
            newWorkbook.Worksheets.Clear();

            //初始化另一个临时 Workbook 对象
            Workbook tempWorkbook = new Workbook();

            //循环遍历字符串数组
            foreach (string file in inputFiles)
            {
                //加载当前工作簿
                tempWorkbook.LoadFromFile(file);
                //循环遍历当前工作簿中的工作表
                foreach (Worksheet sheet in tempWorkbook.Worksheets)
                {
                    //将当前工作簿中的每个工作表复制到新工作簿中 
                    newWorkbook.Worksheets.AddCopy(sheet, WorksheetCopyType.CopyAll);
                }
            }

            //将新工作簿保存到文件
            newWorkbook.SaveToFile("result.xlsx", ExcelVersion.Version2013);
        }
    }
}

VB.NET:

Imports Spire.Xls

Namespace MergeExcelFiles
    Friend Class Program
        Private Shared Sub Main(ByVal args As String())
            '从 Excel 文件路径创建一个字符串数组
            Dim inputFiles = New String() {"sample1.xlsx", "sample2.xlsx", "sample3.xlsx"}

            '初始化一个新的 Workbook 对象
            Dim newWorkbook As Workbook = New Workbook()
            '清除默认工作表
            newWorkbook.Worksheets.Clear()

            '初始化另一个临时 Workbook 对象
            Dim tempWorkbook As Workbook = New Workbook()

            '循环遍历字符串数组
            For Each file In inputFiles
                '加载当前工作簿
                tempWorkbook.LoadFromFile(file)
                '循环遍历当前工作簿中的工作表
                For Each sheet As Worksheet In tempWorkbook.Worksheets
                    '将当前工作簿中的每个工作表复制到新工作簿中 
                    newWorkbook.Worksheets.AddCopy(sheet, WorksheetCopyType.CopyAll)
                Next
            Next

            '将新工作簿保存到文件
            newWorkbook.SaveToFile("result.xlsx", ExcelVersion.Version2013)
        End Sub
    End Class
End Namespace

将多个工作表合并至一个工作表

  • 使用 Workbook.LoadFromFile() 方法初始化 Workbook 对象并加载 Excel 文件。
  • 使用 Workbook.Worksheets[sheetIndex] 属性获取需要合并的两个工作表。请注意,工作表索引是从零开始的。
  • 使用 Worksheet.AllocatedRange 属性获取第二个工作表的使用范围。
  • 使用 Worksheet.Range[rowIndex, columnIndex] 属性在第一个工作表中指定目标范围。请注意,行和列的索引是从 1 开始的。
  • 使用 CellRange.Copy(destRange) 方法将第二个工作表的使用范围复制到第一个工作表中的目标范围。
  • 使用 XlsWorksheet.Remove() 方法删除第二个工作表。
  • 使用 Workbook.SaveToFile() 方法保存结果文件。

C#:

using Spire.Xls;

namespace MergeExcelWorksheets
{
    class Program
    {
        static void Main(string[] args)
        {
            //创建一个 Workbook 对象
            Workbook workbook = new Workbook();
            //Load an Excel file
            workbook.LoadFromFile("sample.xlsx");

            //获取第一个工作表
            Worksheet sheet1 = workbook.Worksheets[0];
            //获取第二个工作表
            Worksheet sheet2 = workbook.Worksheets[1];

            //获取第二个工作表的使用范围
            CellRange sourceRange = sheet2.AllocatedRange;
            //在第一个工作表中指定目标范围
            CellRange destRange = sheet1.Range[sheet1.LastRow + 1, 1];

            //将第二个工作表的使用范围复制到第一个工作表中的目标范围
            sourceRange.Copy(destRange);

            //删除第二个工作表
            sheet2.Remove();

            //保存结果文件
            workbook.SaveToFile("result2.xlsx", ExcelVersion.Version2013);
        }
    }
}

VB.NET:

Imports Spire.Xls

Namespace MergeExcelWorksheets
    Friend Class Program
        Private Shared Sub Main(ByVal args As String())
            '创建一个 Workbook 对象
            Dim workbook As Workbook = New Workbook()
            'Load an Excel file
            workbook.LoadFromFile("sample.xlsx")

            '获取第一个工作表
            Dim sheet1 As Worksheet = workbook.Worksheets(0)
            '获取第二个工作表
            Dim sheet2 As Worksheet = workbook.Worksheets(1)

            '获取第二个工作表的使用范围
            Dim sourceRange As CellRange = sheet2.AllocatedRange
            '在第一个工作表中指定目标范围
            Dim destRange As CellRange = sheet1.Range(sheet1.LastRow + 1, 1)

            '将第二个工作表的使用范围复制到第一个工作表中的目标范围
            sourceRange.Copy(destRange)

            '删除第二个工作表
            sheet2.Remove()

            '保存结果文件
            workbook.SaveToFile("result2.xlsx", ExcelVersion.Version2013)
        End Sub
    End Class
End Namespace

posted @ 2023-01-13 17:48  Gia-  阅读(358)  评论(0编辑  收藏  举报