C#进阶-用于Excel处理的程序集

在.NET开发中,处理Excel文件是一项常见的任务,而有一些优秀的Excel处理包可以帮助开发人员轻松地进行Excel文件的读写、操作和生成。本文介绍了NPOI、EPPlus和Spire.XLS这三个常用的.NET Excel处理包,分别详细介绍了它们的特点、示例代码以及使用方法。通过对这些程序集的比较和示例代码的演示,读者可以更好地理解如何在C#开发中利用这些工具进行Excel文件的读取、写入和操作。这些程序集提供了丰富的功能和灵活的API,能够满足不同场景下对Excel文件处理的需求,有助于提高开发效率和减少工作量。

一、NPOI

NPOI是一个.NET平台上的开源库,用于读取和写入Microsoft Office格式的文件,包括Excel。NPOI提供了一套完整的API,使得开发人员可以方便地对Excel文件进行读写操作,而无需依赖Microsoft Office或其他付费组件。NPOI支持多种Excel格式,包括旧版的xls格式和新版的xlsx格式,同时也支持对Word和PowerPoint等Microsoft Office文件的操作。因其开源免费、功能强大且稳定性高的特点,NPOI被广泛应用于.NET平台的开发项目中。

1、示例代码

① 读取Excel文件

csharp 复制代码
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using System;
using System.IO;

class Program
{
    static void Main(string[] args)
    {
        // 读取Excel文件
        using (FileStream fs = new FileStream("example.xlsx", FileMode.Open, FileAccess.Read))
        {
            IWorkbook workbook = new XSSFWorkbook(fs);
            ISheet sheet = workbook.GetSheetAt(0); // 获取第一个工作表

            // 遍历每一行
            for (int rowIdx = 0; rowIdx <= sheet.LastRowNum; rowIdx++)
            {
                IRow row = sheet.GetRow(rowIdx);
                if (row != null)
                {
                    // 遍历每一个单元格
                    for (int cellIdx = 0; cellIdx < row.LastCellNum; cellIdx++)
                    {
                        ICell cell = row.GetCell(cellIdx);
                        if (cell != null)
                        {
                            Console.Write(cell.ToString() + "\t");
                        }
                    }
                    Console.WriteLine();
                }
            }
        }
    }
}

该示例演示了如何使用NPOI库读取Excel文件中的数据。首先,通过FileStream打开Excel文件,然后创建XSSFWorkbook对象表示整个工作簿,通过GetSheetAt(0)获取第一个工作表。接下来,通过遍历每一行和每一个单元格,将单元格中的内容打印出来。


② 写入Excel文件

csharp 复制代码
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using System.IO;

class Program
{
    static void Main(string[] args)
    {
        // 创建一个工作簿
        IWorkbook workbook = new XSSFWorkbook();

        // 创建一个工作表
        ISheet sheet = workbook.CreateSheet("Sheet1");

        // 创建行和单元格,并设置单元格的值
        IRow row = sheet.CreateRow(0);
        row.CreateCell(0).SetCellValue("Hello");
        row.CreateCell(1).SetCellValue("World");

        // 保存Excel文件
        using (FileStream fs = new FileStream("example.xlsx", FileMode.Create))
        {
            workbook.Write(fs);
        }
    }
}

该示例展示了如何使用NPOI库创建一个Excel文件并写入数据。首先,创建XSSFWorkbook对象表示整个工作簿,然后通过CreateSheet("Sheet1")创建一个名为"Sheet1"的工作表。接着,创建行和单元格,并通过SetCellValue方法设置单元格的值为"Hello"和"World"。最后,通过FileStream将工作簿写入到文件中。


二、EPPlus

EPPlus是一个.NET库,用于创建、操作和读写Excel 2007/2010/2013/2016文件,基于Open XML标准。下面详细解释示例代码中的读取和写入Excel文件的过程,并提供更多代码示例和详解。

1、示例代码

① 读取Excel文件

csharp 复制代码
using OfficeOpenXml;
using System;
using System.IO;

class Program
{
    static void Main(string[] args)
    {
        FileInfo excelFile = new FileInfo("example.xlsx");
        using (ExcelPackage excelPackage = new ExcelPackage(excelFile))
        {
            ExcelWorksheet worksheet = excelPackage.Workbook.Worksheets[0]; // 获取第一个工作表

            int rowCount = worksheet.Dimension.Rows;
            int colCount = worksheet.Dimension.Columns;

            // 遍历每一行和每一个单元格
            for (int row = 1; row <= rowCount; row++)
            {
                for (int col = 1; col <= colCount; col++)
                {
                    Console.Write(worksheet.Cells[row, col].Value.ToString() + "\t");
                }
                Console.WriteLine();
            }
        }
    }
}

在读取Excel文件的示例代码中,我们首先通过FileInfo类创建了一个表示要读取的Excel文件的实例。然后,我们使用ExcelPackage类的构造函数打开了这个Excel文件,并创建了一个ExcelPackage对象,该对象表示整个Excel文件。接下来,我们通过Workbook属性获取了Excel文件的工作簿(workbook),再使用Worksheets属性获取了第一个工作表(worksheet)。通过Dimension属性,我们获取了工作表的行数和列数。最后,我们使用两层循环遍历了每一行和每一个单元格,并通过Cells属性获取单元格对象,并输出了单元格的值。


② 写入Excel文件

csharp 复制代码
using OfficeOpenXml;
using System;
using System.IO;

class Program
{
    static void Main(string[] args)
    {
        FileInfo excelFile = new FileInfo("example.xlsx");
        using (ExcelPackage excelPackage = new ExcelPackage())
        {
            ExcelWorksheet worksheet = excelPackage.Workbook.Worksheets.Add("Sheet1");

            worksheet.Cells["A1"].Value = "Hello";
            worksheet.Cells["B1"].Value = "World";

            excelPackage.SaveAs(excelFile);
        }
    }
}

在写入Excel文件的示例代码中,我们首先创建了一个FileInfo对象来指定要保存的Excel文件的路径。然后,我们创建了一个空的ExcelPackage对象,表示一个新的Excel文件。通过Workbook属性,我们创建了一个工作簿,并使用Worksheets属性添加了一个名为"Sheet1"的工作表。然后,我们使用Cells属性来设置单元格的值,例如"A1"单元格的值设置为"Hello","B1"单元格的值设置为"World"。最后,我们调用SaveAs方法将Excel文件保存到指定路径。


三、Spire.XLS

Spire.XLS是一个专业的.NET Excel组件,支持读写、操作和生成Excel文件,提供了丰富的API和功能。与其他Excel组件相比,Spire.XLS具有性能优越、易于使用和丰富的特性等优势。

1、示例代码

① 读取Excel文件

csharp 复制代码
using Spire.Xls;
using System;

class Program
{
    static void Main(string[] args)
    {
        Workbook workbook = new Workbook();
        workbook.LoadFromFile("example.xlsx");

        Worksheet sheet = workbook.Worksheets[0]; // 获取第一个工作表

        int rowCount = sheet.Rows.Length;
        int colCount = sheet.Columns.Length;

        for (int row = 1; row <= rowCount; row++)
        {
            for (int col = 1; col <= colCount; col++)
            {
                Console.Write(sheet[row, col].Text + "\t");
            }
            Console.WriteLine();
        }
    }
}

以上示例代码演示了如何使用Spire.XLS读取Excel文件。首先,我们创建了一个Workbook对象,并通过LoadFromFile方法加载了名为"example.xlsx"的Excel文件。然后,我们获取了第一个工作表,并分别获取了行数和列数。接着,我们通过两层循环遍历每个单元格,并输出其文本值。

② 写入Excel文件

csharp 复制代码
using Spire.Xls;

class Program
{
    static void Main(string[] args)
    {
        Workbook workbook = new Workbook();
        Worksheet sheet = workbook.Worksheets[0];

        sheet.Range["A1"].Text = "Hello";
        sheet.Range["B1"].Text = "World";

        workbook.SaveToFile("example.xlsx", ExcelVersion.Version2013);
    }
}

以上示例代码展示了如何使用Spire.XLS写入Excel文件。首先,我们创建了一个Workbook对象,并获取了第一个工作表。然后,我们分别在"A1"和"B1"单元格中写入了"Hello"和"World"。最后,我们通过SaveToFile方法将工作簿保存为名为"example.xlsx"的Excel文件,指定保存的Excel版本为2013。


四、Excel处理的程序集总结

除了上述提到的包之外,还有其他一些.NET平台上的Excel处理包,如GemBox.Spreadsheet等,它们也提供了丰富的功能来处理Excel文件。这些示例代码展示了如何使用这些常用的.NET Excel处理包来读取和写入Excel文件。希望这可以帮助您更好地理解它们的用法。

下表列出了几种常见的.NET平台上的Excel处理包及其主要特点的对比:

包名称 支持的格式 主要功能 是否开源 许可证
NPOI xls, xlsx 读写Excel文件、操作单元格 Apache License
EPPlus xlsx 读写Excel文件、操作单元格 GNU GPL v2
Spire.XLS xls, xlsx, csv, pdf 读写Excel文件、操作单元格 商业许可证
GemBox.Spreadsheet xls, xlsx, csv, html 读写Excel文件、操作单元格 商业许可证

以上是对NPOI、EPPlus、Spire.XLS和GemBox.Spreadsheet几种常见Excel处理包的简要比较。这些包各有优缺点,开发人员可以根据项目需求和个人偏好选择合适的Excel处理包。

相关推荐
向宇it9 小时前
【unity小技巧】unity 什么是反射?反射的作用?反射的使用场景?反射的缺点?常用的反射操作?反射常见示例
开发语言·游戏·unity·c#·游戏引擎
九鼎科技-Leo9 小时前
什么是 WPF 中的依赖属性?有什么作用?
windows·c#·.net·wpf
Heaphaestus,RC10 小时前
【Unity3D】获取 GameObject 的完整层级结构
unity·c#
baivfhpwxf202310 小时前
C# 5000 转16进制 字节(激光器串口通讯生成指定格式命令)
开发语言·c#
直裾10 小时前
Scala全文单词统计
开发语言·c#·scala
开心点幸运点11 小时前
Excel——宏教程(1)
excel
ZwaterZ12 小时前
vue el-table表格点击某行触发事件&&操作栏点击和row-click冲突问题
前端·vue.js·elementui·c#·vue
ZwaterZ14 小时前
el-table-column自动生成序号&&在序号前插入图标
前端·javascript·c#·vue
SRC_BLUE_1717 小时前
SQLI LABS | Less-55 GET-Challenge-Union-14 Queries Allowed-Variation 2
oracle·c#·less
yngsqq17 小时前
037集——JoinEntities连接多段线polyline和圆弧arc(CAD—C#二次开发入门)
开发语言·c#·swift