【NPOI】读取Excel文件

NPOI 是一个流行的 .NET 库,用于读取和写入 Excel 文件(包括 XLS 和 XLSX 格式)。以下是一个快速的指南,展示如何使用 NPOI 读取 Excel 文件的基本步骤。

1. 安装 NPOI

首先,你需要在项目中安装 NPOI 库。可以通过 NuGet 包管理器安装:

Install-Package NPOI

或者通过 .NET CLI 安装:

dotnet add package NPOI

2. 读取 Excel 文件

以下是一个基本示例,演示如何使用 NPOI 读取 Excel 文件中的数据。

读取 XLSX 文件示例
using System;  
using System.IO;  
using NPOI.SS.UserModel;  
using NPOI.XSSF.UserModel;  

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

            // 读取行和单元格数据  
            for (int row = 0; row <= sheet.LastRowNum; row++)  
            {  
                IRow currentRow = sheet.GetRow(row);  
                if (currentRow != null) // 确保该行不为空  
                {  
                    for (int col = 0; col < currentRow.LastCellNum; col++)  
                    {  
                        ICell cell = currentRow.GetCell(col);  
                        string cellValue = cell?.ToString() ?? string.Empty; // 读取单元格值  
                        Console.Write($"{cellValue}\t"); // 打印单元格值  
                    }  
                    Console.WriteLine(); // 换行  
                }  
            }  
        }  
    }  
}

3. 读取 XLS 文件示例

如果你需要读取 XLS 格式的文件,则需要使用 HSSFWorkbook 类,如下所示:

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

class Program  
{  
    static void Main(string[] args)  
    {  
        // Excel 文件路径  
        string filePath = "path_to_your_file.xls";  
        
        // 读取 Excel 文件  
        using (FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read))  
        {  
            // 创建工作簿  
            IWorkbook workbook = new HSSFWorkbook(file);  
            ISheet sheet = workbook.GetSheetAt(0); // 获取第一个工作表  

            // 读取行和单元格数据  
            for (int row = 0; row <= sheet.LastRowNum; row++)  
            {  
                IRow currentRow = sheet.GetRow(row);  
                if (currentRow != null) // 确保该行不为空  
                {  
                    for (int col = 0; col < currentRow.LastCellNum; col++)  
                    {  
                        ICell cell = currentRow.GetCell(col);  
                        string cellValue = cell?.ToString() ?? string.Empty; // 读取单元格值  
                        Console.Write($"{cellValue}\t"); // 打印单元格值  
                    }  
                    Console.WriteLine(); // 换行  
                }  
            }  
        }  
    }  
}

重要提示

  • 异常处理:在应用中添加适当的异常处理,例如文件未找到或格式不正确等情况。
  • 资源管理:确保正确管理文件流和内存,使用 using 语句来自动释放资源。
  • 单元格格式:不同类型的单元格(如数值、日期、字符串等)可能需要额外的转换和处理,根据需要进行条件检查。
using NPOI.SS.UserModel;  
using NPOI.XSSF.UserModel; // 处理xlsx文件  
using NPOI.HSSF.UserModel; // 处理xls文件  
using System.IO;  

public class ExcelEx  
{  
    public void Read(string fileName)  
    {  
        // 确保文件存在  
        if (!File.Exists(fileName))  
        {  
            throw new FileNotFoundException("Excel文件未找到", fileName);  
        }  

        IWorkbook workbook;  

        // 获取文件扩展名以判断是 xlsx 还是 xls  
        string fileExtension = Path.GetExtension(fileName).ToLower();  

        using (FileStream fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read))  
        {  
            // 根据文件扩展名选择对应的工作簿类  
            if (fileExtension == ".xlsx")  
            {  
                workbook = new XSSFWorkbook(fileStream); // 使用 XSSFWorkbook 处理 .xlsx 文件  
            }  
            else if (fileExtension == ".xls")  
            {  
                workbook = new HSSFWorkbook(fileStream); // 使用 HSSFWorkbook 处理 .xls 文件  
            }  
            else  
            {  
                throw new NotSupportedException("不支持的文件类型");  
            }  

            // 处理工作簿  
            ISheet sheet = workbook.GetSheetAt(0); // 获取第一个工作表  
            for (int row = 0; row <= sheet.LastRowNum; row++)  
            {  
                IRow currentRow = sheet.GetRow(row);  
                if (currentRow != null)  
                {  
                    for (int col = 0; col < currentRow.LastCellNum; col++)  
                    {  
                        ICell cell = currentRow.GetCell(col);  
                        // 根据需要处理单元格的值  
                        Console.WriteLine(cell?.ToString()); // 输出单元格的值  
                    }  
                }  
            }  
        }  
    }  
}

使用 NPOI 的 XSSF 类来处理 .xlsx 文件

  1. 如果你要处理 .xls 文件,请使用 HSSFWorkbook 类。
  2. 如果你要处理 .xlsx 文件,请使用 XSSFWorkbook 类。

代码说明

  1. 文件存在性检查:确保文件存在,避免找不到文件的异常。
  2. 文件扩展名判断:通过文件扩展名判断是 .xlsx 还是 .xls 文件,然后相应地创建对应的工作簿对象。
  3. 使用 XSSFWorkbook 和 HSSFWorkbook:分别用于处理不同类型的 Excel 文件。
  4. 读取工作表内容:在选择了合适的工作簿之后,通过遍历行和列读取数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

幽兰的天空

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值