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 文件
- 如果你要处理 .xls 文件,请使用
HSSFWorkbook
类。 - 如果你要处理 .xlsx 文件,请使用
XSSFWorkbook
类。
代码说明
- 文件存在性检查:确保文件存在,避免找不到文件的异常。
- 文件扩展名判断:通过文件扩展名判断是 .xlsx 还是 .xls 文件,然后相应地创建对应的工作簿对象。
- 使用 XSSFWorkbook 和 HSSFWorkbook:分别用于处理不同类型的 Excel 文件。
- 读取工作表内容:在选择了合适的工作簿之后,通过遍历行和列读取数据。