【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 methodsdo{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 methodDataSet 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介绍
今天来给大家介绍一下ExcelDataReader,ExcelDataReader是一个轻量级的可快速读取Excel文件中数据的工具。话不多说直接开始。 ExcelDataReader简介 ExcelDataReader支持.xlsx、.xlsb、.xls、.csv格式文件的读取,版本基本在2007及以上版本,支…...
Vala编程语言教程-控制结构
控制结构 while (a > b) { a--; } 会重复递减a,每次迭代前检查a是否大于b。 do { a--; } while (a > b); 会重复递减a,每次迭代后检查a是否大于b。 for (int a 0; a < 10; a) { stdout.printf("%d\n", a); } 会先将a初始化为0…...
《视觉SLAM十四讲》ch13 设计SLAM系统 相机轨迹实现
前言 相信大家在slam学习中,一定会遇到slam系统的性能评估问题。虽然有EVO这样的开源评估工具,我们也需要自己了解系统生成的trajectory.txt的含义,方便我们更好的理解相机的运行跟踪过程。 项目配置如下: 数据解读: …...
服务的拆分数据的迁移
参考: 数据迁移调研...
在类Unix终端中如何实现快速进入新建目录
🚪 前言 相信喜欢使用终端工作的小伙伴或多或少会被一个小地方给膈应,那就是每次想要新建一个文件夹并且进入之,那么就需要两条指令:mkdir DIR和cd DIR,有些人可能要杠了,我一条指令也能,mkdir…...
01分数规划,二分法,题目练习
一、01分数规划 1.1 01分数规划 01分数规划用来求一个分式的极值。模型如下: 给出 a i a_i ai 和 b i b_i bi,求一组 w i ∈ { 0 , 1 } w_i \in \{ 0, 1 \} wi∈{0,1}最小化或最大化 ∑ i 1 n a i w i ∑ i 1 n b i w i \frac{\sum_{i1…...
TG电报群管理机器人定制开发的重要性
在Telegram(电报)用户突破20亿、中文社群规模持续扩张的背景下,定制化群管理机器人的开发已成为社群运营的战略刚需。这种技术工具不仅解决了海量用户管理的效率难题,更通过智能化功能重构了数字社群的治理范式。本文从管理效能、…...
VNA操作使用学习-01 界面说明
以我手里面的liteVNA为例。也可以参考其他的nanoVNA的操作说明。我先了解一下具体的菜单意思。 今天我想做一个天调,居然发现我连一颗基本的50欧姆插件电阻和50欧姆的smt电阻的幅频特性都没有去测试过,那买来这个nva有什么用途呢,束之高阁求…...
mysql-DELETE、DROP 和 TRUNCATE区别
在MySQL中,DELETE、DROP 和 TRUNCATE 是用于不同目的的SQL命令,它们各自执行不同的数据库操作。以下是它们的区别和适用场景: DELETE 用途:用于从表中删除满足特定条件的行。语法示例:DELETE FROM table_name WHERE …...
耘想Docker版Linux NAS的安装说明
耘想LinNAS(Linux NAS)可以通过Docker部署,支持x86和arm64两种硬件架构。下面讲解LinNAS的部署过程。 1. 安装Docker CentOS系统:yum install docker –y Ubuntu系统:apt install docker.io –y 2. 下载LinNas镜像…...
OpenCV图像拼接(4)图像拼接模块的一个匹配器类cv::detail::BestOf2NearestRangeMatcher
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::detail::BestOf2NearestRangeMatcher 是 OpenCV 库中用于图像拼接模块的一个匹配器类,专门用于寻找两幅图像之间的最佳特征点匹配…...
k8s 配置imagePullSecrets仓库认证
在 Kubernetes (K8s) 中,imagePullSecrets 允许 Pod 访问私有镜像仓库,例如 Docker Hub、Harbor、阿里云镜像仓库、腾讯云 TCR 或自建的 registry.flow.cn。以下是完整的 imagePullSecrets 配置步骤: 步骤 1:创建 imagePullSecret…...
不用 Tomcat?SpringBoot 项目用啥代替?
在SpringBoot框架中,我们使用最多的是Tomcat,这是SpringBoot默认的容器技术,而且是内嵌式的Tomcat。 同时,SpringBoot也支持Undertow容器,我们可以很方便的用Undertow替换Tomcat,而Undertow的性能和内存使…...
Zabbix安装(保姆级教程)
Zabbix 是一款开源的企业级监控解决方案,能够监控网络的多个参数以及服务器、虚拟机、应用程序、服务、数据库、网站和云的健康状况和完整性。它提供了灵活的通知机制,允许用户为几乎任何事件配置基于电子邮件的告警,从而能够快速响应服务器问…...
鸿蒙开发真机调试:无线调试和USB调试
前言 在鸿蒙开发的旅程中,真机调试堪称至关重要的环节,其意义不容小觑。虽说模拟器能够为我们提供初步的测试环境,方便我们在开发过程中快速预览应用的基本效果,但它与真机环境相比,仍存在诸多差异。就好比在模拟器中…...
深度学习中的“刹车”:正则化如何防止模型“超速”
深度学习中的“刹车”:正则化如何防止模型“超速” 大家好!今天我们来聊聊深度学习中的一个重要概念——正则化。 什么是过拟合? 想象一下,你正在教一个孩子认字。你给他看很多猫的图片,他都能正确识别。但是&#…...
在C语言基础上学Java【Java】【一】
众所周知,Java是C风格的语言,对于学过C语言的人学Java可以快速适应。 废话不多说,直接边看代码边学。 数据类型,输入和输出 import java.util.Scanner;//为了使用Scanner public class a1 {//a1是类名,就是文件名&am…...
工厂函数详解:概念、目的与作用
一、什么是工厂函数? 工厂函数(Factory Function)是一种设计模式,其核心是通过一个函数来 创建并返回对象,而不是直接使用 new 或构造函数实例化对象。它封装了对象的创建过程,使代码更灵活、可维护。 二、…...
FastAPI WebSocket 无法获取真实 IP 错误记录
FastAPI WebSocket 无法获取真实 IP 错误记录 问题描述 在使用 FastAPI WebSocket 服务时,发现无法获取设备的真实 Remote IP,所有连接均显示为内网地址 10.x.x.1。以下是完整的排查过程及解决方案。 排查步骤 1. 基础信息检查 • 现象复现࿱…...
Android自动化测试终极指南:从单元到性能全覆盖!
在快节奏的移动开发中,应用的稳定性与用户体验直接决定成败。手动测试效率低下,自动化测试成为提升质量的核心手段。本文将手把手带你掌握Android项目中的六大测试工具,涵盖单元测试、UI测试、性能测试、端到端测试等核心场景,助你构建坚如磐石的应用! 1. 单元测试:JUni…...
Python简单爬虫实践案例
学习目标 能够知道Web开发流程 能够掌握FastAPI实现访问多个指定网页 知道通过requests模块爬取图片 知道通过requests模块爬取GDP数据 能够用pyecharts实现饼图 能够知道logging日志的使用 一、基于FastAPI之Web站点开发 1、基于FastAPI搭建Web服务器 # 导入FastAPI模…...
Thunderbolt(雷电接口)详解
一、Thunderbolt的定义与核心特性 Thunderbolt 是由 Intel 和 Apple 联合开发的高速接口标准,结合PCIe和DisplayPort协议,支持 数据传输、视频输出、电源供应及设备级联。其核心特性包括: 超高带宽:Thunderbolt 4支持 40Gbps全双…...
基于springboot的房产销售系统(016)
摘 要 随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势;对于房产销售系统当然也不能排除在外,随着网络技术的不断成熟,带动了房产销售系统,它彻底改变了过去传统的…...
云盘搭建笔记
报错问题: No input file specified. 伪静态 location / {if (!-e $request_filename) { rewrite ^(.*)$ /index.php/$1 last;break;} } location / { if (!-e $request_filename) { rewrite ^(.*)$ /index.php/$1 last; break; } } 设…...
《从深海到卫浴:Relax Max如何用军工科技重塑生活仪式》
《从深海到卫浴:Relax Max如何用军工科技重塑生活仪式》 当瑞士联邦理工学院的一纸专利授权书揭开帷幕,卫浴行业终于意识到:Relax Max的「军工科技民用化」绝非营销噱头。这支由前潜艇工程师和航天材料学家组成的团队,将核潜艇…...
【vulhub/wordpress靶场】------获取webshell
1.进入靶场环境: 输入:cd / vulhub / wordpress / pwnscriptum 修改版本号: vim docker-compose.yml version: 3 保存退出 开启靶场环境: docker - compose up - d 开启成功,docker ps查看端口 靶场环境80…...
从OSI七层网络模型角度了解CAN通信协议
前言:先占个位置,文章内容皆来自网络,我只是搬运工,等后面理解深刻了再进行修文。 CAN通信协议的网络架构基于OSI七层模型进行设计,但实际实现中根据其应用场景(如汽车电子、工业控制等)进行了…...
人工智能助力家庭机器人:从清洁到陪伴的智能转型
引言:家庭机器人进入智能时代 过去,家庭机器人只是简单的“工具”,主要用于扫地、拖地、擦窗等单一任务。然而,随着人工智能(AI)技术的迅猛发展,家庭机器人正经历从“机械助手”向“智能管家”甚…...
【第14节】windows sdk编程:进程与线程介绍
目录 一、进程与线程概述 1.1 进程查看 1.2 何为进程 1.3 进程的创建 1.4 进程创建实例 1.5 线程查看 1.6 何为线程 1.7 线程的创建 1.8 线程函数 1.9 线程实例 二、内核对象 2.1 何为内核对象 2.2 内核对象的公共特点 2.3 内核对象句柄 2.4 内核对象的跨进程访…...
pytorch小记(十二):pytorch中 masked_fill_() vs. masked_fill() 详解
pytorch小记(十二):pytorch中 masked_fill_() vs. masked_fill()详解 PyTorch masked_fill_() vs. masked_fill() 详解1️⃣ masked_fill() 和 masked_fill_() 的作用2️⃣ masked_fill() vs. m…...
