NPOI打开EXCEL
时间: 2025-05-24 14:02:32 浏览: 19
### 使用NPOI库在C#中打开和处理Excel文件
#### 安装NPOI库
要在C#项目中使用NPOI库,可以通过NuGet包管理器安装该库。具体操作是在Visual Studio中右键点击项目,选择“管理NuGet程序包”,然后搜索并安装`NPOI`[^3]。
#### 引用必要的命名空间
为了能够顺利操作Excel文件,需要引入以下命名空间:
```csharp
using NPOI.SS.UserModel; // 提供Excel相关的接口和类
using NPOI.XSSF.UserModel; // 用于处理.xlsx格式的文件
using NPOI.HSSF.UserModel; // 用于处理.xls格式的文件
using System.IO; // 文件操作所需的命名空间
```
#### 打开现有的Excel文件
要打开一个已有的Excel文件,可以根据其扩展名判断是`.xls`还是`.xlsx`文件,并分别使用不同的类来加载文件内容。以下是具体的实现代码:
对于`.xlsx`文件:
```csharp
// 加载.xlsx文件
using (FileStream file = new FileStream("example.xlsx", FileMode.Open, FileAccess.Read))
{
IWorkbook workbook = new XSSFWorkbook(file);
}
```
对于`.xls`文件:
```csharp
// 加载.xls文件
using (FileStream file = new FileStream("example.xls", FileMode.Open, FileAccess.Read))
{
IWorkbook workbook = new HSSFWorkbook(file);
}
```
以上代码片段展示了如何通过流的方式读取不同版本的Excel文件[^4]。
#### 访问工作表和单元格数据
一旦成功加载了Excel文件的工作簿对象(`IWorkbook`),就可以进一步访问其中的工作表、行以及单元格的数据。下面是一段示例代码展示这一过程:
```csharp
ISheet sheet = workbook.GetSheetAt(0); // 获取第一个工作表
for (int rowIndex = sheet.FirstRowNum; rowIndex <= sheet.LastRowNum; rowIndex++)
{
IRow row = sheet.GetRow(rowIndex);
if (row != null)
{
for (int cellIndex = row.FirstCellNum; cellIndex < row.LastCellNum; cellIndex++)
{
ICell cell = row.GetCell(cellIndex);
if (cell != null)
{
string value;
switch (cell.CellType)
{
case CellType.String:
value = cell.StringCellValue;
break;
case CellType.Numeric:
if (DateUtil.IsCellDateFormatted(cell))
value = cell.DateCellValue.ToString();
else
value = cell.NumericCellValue.ToString();
break;
default:
value = "";
break;
}
Console.WriteLine($"({rowIndex}, {cellIndex}) => {value}");
}
}
}
}
```
此部分代码实现了遍历整个工作表中的每一行及其对应的每一个单元格,并依据单元格的具体类型提取相应的值。
#### 关闭资源
完成对Excel文件的操作之后,务必关闭所有使用的资源以释放内存。通常情况下,在使用`using`语句时会自动执行这一点,但如果手动创建了一些额外的对象,则需显式调用它们的`Dispose()`方法或类似的清理机制。
---
### 性能优化提示
当涉及大量数据时,应考虑以下几个方面来提高效率:
- **减少不必要的对象创建**:只在必要时候才实例化新的对象。
- **采用批处理模式**:尽量一次性写入多个单元格而非逐一操作。
- **精简样式应用**:避免过度复杂的格式设定以免增加负担[^4]。
---
阅读全文
相关推荐




















