C#中ExcelDataReader的具体使用

 更新时间:2025年04月02日 09:20:22   作者:火一线  
ExcelDataReader是一个轻量级的可快速读取Excel文件中数据的工具,本文主要介绍了C#中ExcelDataReader的具体使用,具有一定的参考价值,感兴趣的可以了解一下

今天来给大家介绍一下ExcelDataReader,ExcelDataReader是一个轻量级的可快速读取Excel文件中数据的工具。话不多说直接开始。

ExcelDataReader简介

ExcelDataReader支持.xlsx、.xlsb、.xls、.csv格式文件的读取,版本基本在2007及以上版本,支持的格式和版本看下图。

我们首先需要再VS中添加ExcelDataReader程序集,在 工具 -> NuGet包管理器 -> 管理解决方案的NuGet程序包 中搜索ExcelDataReader,并安装到工程中。如下图:

ExcelDataReader和ExcelDataReader.DataSet都可以调用ExcelDataReader库,官网介绍由于版本升级问题,如果需要使用AsDataSet()方法则需要安装ExcelDataReader.DataSet。

ExcelDataReader使用

我们下来介绍一下ExcelDataReader对于数据的读取,有两种方式可以读取Excel,IExcelDataReader方法和DataSet方法。

我们先来展示一下Excel文件的示例,图1是Sheet1,图2是Sheet2

IExcelDataReader

首先我们需要通过 File.OpenRead 来获取 Excel.xlsx 的文件流数据。通过 ExcelReaderFactory.CreateReader 接口来创建 IExcelDataReader reader 对象,reader采取的是逐个工作表、逐行的方式读取数据,然后通过 reader.GetString(0) 获取数据。

reader默认为第一个工作表,第一行数据开始。调用 reader.NextResult() 接口 reader 会移入下一个工作表。调用 reader.Read() 接口 reader 会读取一行数据。reader.GetString(0) 接口是通过索引来获取字符串数据,除此之外 reader 还有其他获取不同类型数据的接口,小伙伴可以自行查阅文档。

由于 IExcelDataReader 采用的是逐页、逐行读取数据的方式,这种方式随便不够灵活便捷,但由于每次读取数据量少,所以在运行效率和性能上有比较大的优势。

using System.Text;
using ExcelDataReader;

public class Program
{
    static void Main(string[] args)
    {
        Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);

        string filePath = "Excel.xlsx";
        using (FileStream stream = File.OpenRead(filePath))
        {
            using (IExcelDataReader reader = ExcelReaderFactory.CreateReader(stream))
            {
                // 1. Use the reader methods
                do
                {
                    Console.WriteLine($"Sheet name:{reader.Name}");

                    while (reader.Read())
                    {
                        Console.WriteLine($"{reader.GetString(0)} \t\t{reader.GetString(1)}");
                    }

                    Console.WriteLine();
                } while (reader.NextResult());
            }
        }
    }
}

AsDataSet

同样我们需要通过 File.OpenRead 来获取 Excel.xlsx 的文件流数据,然后通过 ExcelReaderFactory.CreateReader 接口来创建 IExcelDataReader reader 对象,这与之前的操作一样。

之后我们通过 reader.AsDataSet() 接口来获取 DataSet dataSet 对象,dataSet 可以采用索引的方式来获取数据。通过  dataSet.Tables[0] 可以获取到 DataTable dataTable 对象。dataTable 就是Excel的工作页,输出 dataTable.TableName 可以获取到工作页名称。我们再通过 dataTable.Rows[0] 来获取 DataRow dataRow 对象,dataRow 是当前工作页下每一行的数据,通过 dataRow[0] 可以获取单元格中的数据。

除了索引获取数据以外,依然可以通过遍历的方式来获取数据,示例代码如下。

using System.Data;
using System.Text;
using ExcelDataReader;

public class Program
{
    static void Main(string[] args)
    {
        Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);

        string filePath = "Excel.xlsx";
        using (FileStream stream = File.OpenRead(filePath))
        {
            using (IExcelDataReader reader = ExcelReaderFactory.CreateReader(stream))
            {
                // 2. Use the AsDataSet extension method
                DataSet dataSet = reader.AsDataSet();

                DataTable dataTable = dataSet.Tables[0];
                Console.WriteLine(dataTable.TableName);

                DataRow dataRow = dataTable.Rows[0];
                Console.WriteLine($"{dataRow[0]} {dataRow[1]}\n");

                foreach (DataTable table in dataSet.Tables)
                {
                    Console.WriteLine(table.TableName);
                    foreach (DataRow row in table.Rows)
                    {
                        Console.WriteLine($"{row[0]} \t{row[1]}");
                    }
                    Console.WriteLine();
                }
            }
        }
    }
}

补充说明

需要补充说明一下的是 ExcelDataReader 在.NET Core 和 .NET 5.0 或更高版本中会抛出encoding 1252的错误编码。解决办法就是需要为System.Text.Encoding.CodePages添加一个依赖项,在代码中添加 Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); 这段代码

官方文档链接

ExcelDataReader链接:https://github.com/ExcelDataReader/ExcelDataReader

到此这篇关于C#中ExcelDataReader的具体使用的文章就介绍到这了,更多相关C# ExcelDataReader内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C# DoubleClick与MouseDoubleClick区别,双击事件引发顺序

    C# DoubleClick与MouseDoubleClick区别,双击事件引发顺序

    从逻辑上来说,由于比MouseDoubleClick 描述更抽象,DoubleClick 事件是控件的更高级别的事件
    2009-09-09
  • C# 复制指定节点的所有子孙节点到新建的节点下

    C# 复制指定节点的所有子孙节点到新建的节点下

    这篇文章主要介绍了C# 复制指定节点的所有子孙节点到新建的节点下的相关资料,非常不错具有一定的参考借鉴价值,需要的朋友可以参考下
    2016-10-10
  • C#绘制实时曲线的方法

    C#绘制实时曲线的方法

    这篇文章主要为大家详细介绍了C#绘制实时曲线的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • C#中类与结构的区别实例分析

    C#中类与结构的区别实例分析

    这篇文章主要介绍了C#中类与结构的区别,类与结构是C#初学者比较轻易混淆的概念,本文加以实例说明,需要的朋友可以参考下
    2014-08-08
  • 解析C#网络编程中的Http请求

    解析C#网络编程中的Http请求

    这篇文章主要介绍了C#网络编程中的Http请求,不过这次也使我对C#网络编程了解的更多,算是一次学习经历吧,文章结合示例代码给大家介绍的非常详细,需要的朋友可以参考下
    2022-03-03
  • C#使用linq对数组进行筛选排序的方法

    C#使用linq对数组进行筛选排序的方法

    这篇文章主要介绍了C#使用linq对数组进行筛选排序的方法,实例分析了C#实用linq扩展进行数组排序的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-04-04
  • C#中数组扩容的几种方式介绍

    C#中数组扩容的几种方式介绍

    这篇文章介绍了C#中数组扩容的几种方式,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-08-08
  • WinForm中跨线程操作UI的解决方案汇总

    WinForm中跨线程操作UI的解决方案汇总

    在开发WinForm应用程序时,经常会遇到需要在线程间操作UI的情况,直接从非UI线程更新UI控件会导致异常,因此我们需要采取适当的方法来安全地进行这些操作,本文总结了几种常见的解决方法,并对其优缺点进行了分析,需要的朋友可以参考下
    2025-06-06
  • C#中对称加密算法的踩坑日常记录

    C#中对称加密算法的踩坑日常记录

    这篇文章主要给大家介绍了关于C#中对称加密算法的踩坑日常记录,文中通过示例代码介绍的非常详细,对大家学习或者使用C#具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-06-06
  • C# DataGridView添加新行的2个方法

    C# DataGridView添加新行的2个方法

    DataGridView控件在实际应用中非常实用,特别需要表格显示数据时。
    2013-03-03

最新评论