编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

c# npoi合并两个excel

wxchong 2024-06-22 21:09:28 开源技术 10 ℃ 0 评论

NPOI 是一个开源的 .NET 库,用于读写 Microsoft Office 格式的文件,包括 Excel。使用 NPOI,你可以轻松地在 C# 中处理 Excel 文件,包括合并单元格。以下是一个示例,演示如何使用 NPOI 合并两个 Excel 文件的内容。

首先,确保你已经安装了 NPOI。你可以通过 NuGet 包管理器来安装它:

Install-Package NPOI

或者通过 .NET CLI:

dotnet add package NPOI

以下是一个简单的示例,说明如何将两个 Excel 文件的内容合并到一个新的 Excel 文件中:

csharpusing NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using System;
using System.IO;

class Program
{
    static void Main()
    {
        string filePath1 = "path_to_first_excel.xlsx"; // 第一个 Excel 文件的路径
        string filePath2 = "path_to_second_excel.xlsx"; // 第二个 Excel 文件的路径
        string outputPath = "path_to_output_excel.xlsx"; // 输出 Excel 文件的路径

        IWorkbook workbook1 = File.Exists(filePath1) ? GetWorkbook(filePath1) : null;
        IWorkbook workbook2 = File.Exists(filePath2) ? GetWorkbook(filePath2) : null;

        if (workbook1 == null || workbook2 == null)
        {
            Console.WriteLine("One or both Excel files could not be opened.");
            return;
        }

        // 创建一个新的工作簿来保存合并后的内容
        IWorkbook mergedWorkbook = new XSSFWorkbook();

        // 遍历第一个工作簿的所有工作表
        foreach (ISheet sheet in workbook1)
        {
            // 在新工作簿中创建一个与当前工作表同名的工作表
            ISheet newSheet = mergedWorkbook.CreateSheet(sheet.SheetName);

            // 复制第一个工作簿中工作表的内容到新的工作簿
            CopySheetContent(sheet, newSheet);
        }

        // 遍历第二个工作簿的所有工作表
        foreach (ISheet sheet in workbook2)
        {
            // 在新工作簿中创建一个与当前工作表同名的工作表
            ISheet newSheet = mergedWorkbook.CreateSheet(sheet.SheetName);

            // 复制第二个工作簿中工作表的内容到新的工作簿
            CopySheetContent(sheet, newSheet);
        }

        // 保存合并后的工作簿
        using (FileStream stream = new FileStream(outputPath, FileMode.Create, FileAccess.Write))
        {
            mergedWorkbook.Write(stream);
        }

        Console.WriteLine("Excel files have been merged successfully.");
    }

    private static void CopySheetContent(ISheet sourceSheet, ISheet destinationSheet)
    {
        // 复制行
        for (int i = sourceSheet.FirstRowNum; i <= sourceSheet.LastRowNum; i++)
        {
            IRow sourceRow = sourceSheet.GetRow(i);
            IRow destinationRow = destinationSheet.CreateRow(i);

            if (sourceRow != null)
            {
                // 复制单元格
                for (int j = sourceRow.FirstCellNum; j < sourceRow.LastCellNum; j++)
                {
                    ICell sourceCell = sourceRow.GetCell(j);
                    ICell destinationCell = destinationRow.CreateCell(j);

                    if (sourceCell != null)
                    {
                        // 设置单元格内容
                        destinationCell.SetCellValue(sourceCell.ToString());

                        // 还可以复制单元格样式等,如果需要的话
                        // destinationCell.CellStyle = sourceCell.CellStyle;
                    }
                }
            }
        }
    }

    private static IWorkbook GetWorkbook(string filePath)
    {
        IWorkbook workbook;

        using (FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read))
        {
            workbook = WorkbookFactory.Create(file);
        }

        return workbook;
    }
}

这个示例程序首先加载两个 Excel 文件,然后遍历每个工作簿中的所有工作表,并将每个工作表的内容复制到新的工作簿中。请注意,如果两个 Excel 文件有相同名称的工作表,那么第二个文件的工作表将覆盖第一个文件的同名工作表。

此外,CopySheetContent 方法仅复制单元格的值。如果你还想复制单元格的样式、格式或其他属性,

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表