首页 > 其他分享 >【NPOI】读取Excel文件

【NPOI】读取Excel文件

时间:2024-11-12 15:14:50浏览次数:3  
标签:文件 读取 Excel NPOI new using

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. 读取工作表内容:在选择了合适的工作簿之后,通过遍历行和列读取数据。

标签:文件,读取,Excel,NPOI,new,using
From: https://blog.csdn.net/qq_25699299/article/details/143715635

相关文章

  • excel 字符比较函数
    ‌在Excel中,用于字符比较的函数主要有以下几种‌:‌EXACT函数‌:用于比较两个文本字符串是否完全相同,包括大小写。如果两个字符串完全相同(包括大小写),则返回TRUE;否则返回FALSE。例如,=EXACT("ABC","abc")的结果为FALSE,而=EXACT("ABC","ABC")的结果为TRUE‌12。‌FIND函数‌:用......
  • 使用VBS对Excel文件内容进行批量替换
    1、通过读取外部txt文件的方式进行替换OptionExplicitIfWscript.Arguments.Count=0ThenWScript.EchoChr(10)&_"[正确操作]"&Chr(10)&Chr(10)&_Chr(9)&"拖拽导出的Excel文件到本程序"&Chr(10)&Chr(10)&_"[错误操作]"&C......
  • R - 读取excel 文件
    #使用readxl包来读取Excel文件install.packages("readxl")#仅需运行一次library(readxl)#假设Excel文件名为"your_file.xlsx"#默认读取第一个工作表df<-read_excel("your_file.xlsx")#指定读取特定的工作表df<-read_excel("your_file.xlsx",......
  • [经典] 前端js将文件流导出为csv/excel文件
    前端将文件流导出为csv/excel文件有两种方式:1.后端直接返回文件连接:前端正常请求,后端返回一个静态文件链接,直接使用:window.location.href=url简单,但是缺点是耗资源,后端需要把数据转化为excel存起来,并且直接暴露连接。2.后台返回二进制流:前台请求后台接口拿到二进制流转......
  • 「漏洞复现」某融信运维安全审计系统 download 任意文件读取漏洞
    0x01 免责声明请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任。工具来自网络,安全性自测,如有侵权请联系删除。本次测试仅供学习使用,如若非法他用,与平台和本文作者无关,需......
  • 第21节 arkts 如何读取普通文件
    在ArkTS中读取普通文件可以通过以下几种方式:使用@ohos.fileio模块@ohos.fileio模块提供了一系列用于文件操作的接口,可以用于读取普通文件。以下是一个简单的示例,展示如何读取一个文本文件的内容:importfileiofrom'@ohos.fileio';@Entry@Componentstruct......
  • 三种读取配置文件的方式
      在编写JDBC的util包以读取文件时,配置文件的位置会影响其读取方式。当前,默认配置文件直接放置在src文件夹下。当读取.properties文件代码写法为:Propertiesprops=newProperties();props.load(newFileInputStream("db.properties")); 系统出现报错找不到文件,说......
  • excel中查找亏损第一大第二大第三大的商品的亏损金额;涨出第一大,第二大,第三大的金额;以
     k2里的公式 =LARGE(IF(B:B="品类1",E:E),1)lL里的公式 =LARGE(IF(B:B="品类1",E:E),2)M2里额公式 =LARGE(IF(B:B="品类1",E:E),3)N2里的公式=MIN(IF(B:B="品类1",E:E),1)O2里的公式=SMALL(IF(B:B="品类1",E:E),2)P2里的公式 =SMALL(IF(B:B="品类1&......
  • ENVI55扩展工具: MODIS Gap-Filled 数据读取工具
    1工具介绍工具支持ENVI5.5及以上版本。大部分MODIS产品数据均可使用MCTK工具打开和处理。但是最近在使用MODISGap-Filled数据时,发现MCTK工具并不支持,会弹出如下提示。 MODISGap-Filled数据通常为年合成产品,例如MOD17A3HGF为年合成植被净初级生产力和总初级......
  • Excel.Application使用手册(摘自:https://www.cnblogs.com/codingking/p/6484461.html)
    定制模块行为(1)OptionExplicit'强制对模块内所有变量进行声明  OptionPrivateModule'标记模块为私有,仅对同一工程中其它模块有用,在宏对话框中不显示  OptionCompareText'字符串不区分大小写  OptionBase1'指定数组的第一个下标为1(2)OnErrorResumeNe......