如何快速读取Excel文件:ExcelDataReader完整使用指南
ExcelDataReader是一款轻量级且高效的C#库,专门用于读取Microsoft Excel文件(包括XLS、XLSX、CSV等多种格式)。本指南将帮助你快速掌握这个强大工具的使用方法,从安装到高级配置,让Excel文件处理变得简单高效!
📋 支持的文件格式与版本
ExcelDataReader支持几乎所有常见的Excel文件格式,无论是古老的Excel 2.0还是最新的Excel 365格式,都能轻松应对:
| 文件类型 | 容器格式 | 文件格式 | 支持的Excel版本 |
|---|---|---|---|
| .xlsx | ZIP | OpenXml | 2007及以上版本 |
| .xlsb | ZIP/CFB | OpenXml | 2007及以上版本 |
| .xls | CFB | BIFF8 | 97-2003、Mac版Excel |
| .xls | CFB | BIFF5 | 5.0、95版本 |
| .csv | - | CSV | 所有版本 |
ExcelDataReader支持多种Excel文件格式,满足不同场景需求
🚀 快速安装步骤
安装ExcelDataReader非常简单,推荐使用NuGet包管理器:
- 基础包:提供核心读取功能
Install-Package ExcelDataReader
- DataSet扩展包:支持将Excel数据转换为DataSet(会自动安装基础包)
Install-Package ExcelDataReader.DataSet
这两个包兼容net462、netstandard2.0和netstandard2.1,适用于大多数.NET项目。
💻 入门使用示例
下面是一个简单的Excel文件读取示例,只需几行代码即可完成:
using (var stream = File.Open(filePath, FileMode.Open, FileAccess.Read))
{
// 自动检测文件格式
using (var reader = ExcelReaderFactory.CreateReader(stream))
{
// 方法1:使用AsDataSet()快速获取数据
var result = reader.AsDataSet();
// 方法2:使用reader手动读取数据
do
{
while (reader.Read())
{
// 读取单元格数据,例如:reader.GetDouble(0)
}
} while (reader.NextResult());
}
}
🔍 读取CSV文件
对于CSV文件,只需使用专门的CSV读取器:
using (var reader = ExcelReaderFactory.CreateCsvReader(stream))
{
// CSV读取逻辑
}
⚙️ 高级配置选项
ExcelDataReader提供了丰富的配置选项,可以根据需求自定义读取行为。以下是一些常用配置:
基本配置示例
var configuration = new ExcelReaderConfiguration()
{
// 设置编码(当文件缺少编码信息时使用)
FallbackEncoding = Encoding.GetEncoding(1252),
// 设置密码(用于加密文件)
Password = "your_password",
// CSV分隔符自动检测
AutodetectSeparators = new char[] { ',', ';', '\t' },
// 保持流打开状态
LeaveOpen = false
};
var reader = ExcelReaderFactory.CreateReader(stream, configuration);
DataSet配置示例
如果你需要将Excel数据转换为DataSet,可以使用以下高级配置:
var result = reader.AsDataSet(new ExcelDataSetConfiguration()
{
ConfigureDataTable = (tableReader) => new ExcelDataTableConfiguration()
{
// 使用第一行作为列名
UseHeaderRow = true,
// 自定义列名前缀
EmptyColumnNamePrefix = "Column",
// 过滤行
FilterRow = (rowReader) => rowReader.Depth > 0,
// 过滤列
FilterColumn = (rowReader, columnIndex) => columnIndex < 10
}
});
📚 核心API参考
ExcelDataReader的核心功能通过IExcelDataReader接口提供,以下是一些常用方法和属性:
| 方法/属性 | 描述 |
|---|---|
Read() |
读取当前工作表的下一行 |
NextResult() |
移动到下一个工作表 |
ResultsCount |
获取工作表数量 |
Name |
获取当前工作表名称 |
FieldCount |
获取当前行的列数 |
RowCount |
获取当前工作表的行数 |
GetValue(int i) |
获取指定列的单元格值 |
GetDouble(int i)/GetString(int i)等 |
获取指定类型的单元格值 |
详细API定义可以查看源代码文件:src/ExcelDataReader/IExcelDataReader.cs
💡 实用技巧与注意事项
.NET Core编码问题
在.NET Core或.NET 5+中使用时,可能会遇到编码问题,解决方法是添加System.Text.Encoding.CodePages包并注册编码提供程序:
System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);
格式化单元格值
ExcelDataReader本身不处理格式化,但可以结合ExcelNumberFormat库实现:
string GetFormattedValue(IExcelDataReader reader, int columnIndex, CultureInfo culture)
{
var value = reader.GetValue(columnIndex);
var formatString = reader.GetNumberFormatString(columnIndex);
if (formatString != null)
{
var format = new NumberFormat(formatString);
return format.Format(value, culture);
}
return Convert.ToString(value, culture);
}
进度指示
处理大型Excel文件时,可以实现进度指示功能:
FilterRow = (rowReader) => {
int progress = (int)Math.Ceiling((decimal)rowReader.Depth / rowReader.RowCount * 100);
// 更新进度条
return true;
}
🔄 从2.x版本迁移
如果你正在从ExcelDataReader 2.x版本迁移到3.x,需要注意以下变化:
- 命名空间从
Excel改为ExcelDataReader - 需要单独安装
ExcelDataReader.DataSet包才能使用AsDataSet()方法 IsFirstRowAsColumnNames属性已被移除,改用UseHeaderRow配置:
var result = reader.AsDataSet(new ExcelDataSetConfiguration()
{
ConfigureDataTable = (_) => new ExcelDataTableConfiguration()
{
UseHeaderRow = true
}
});
🎯 总结
ExcelDataReader是一个功能强大且高效的Excel文件读取库,支持多种格式,易于使用且高度可配置。无论你是需要处理简单的Excel文件还是复杂的企业级报表,ExcelDataReader都能满足你的需求。
通过本指南,你已经了解了ExcelDataReader的安装、基本使用、高级配置和实用技巧。现在,你可以开始在自己的项目中使用这个优秀的库来处理Excel文件了!
如果你想深入了解更多细节,可以查看项目源代码或测试用例:src/ExcelDataReader.Tests
GLM-5智谱 AI 正式发布 GLM-5,旨在应对复杂系统工程和长时域智能体任务。Jinja00
GLM-5-w4a8GLM-5-w4a8基于混合专家架构,专为复杂系统工程与长周期智能体任务设计。支持单/多节点部署,适配Atlas 800T A3,采用w4a8量化技术,结合vLLM推理优化,高效平衡性能与精度,助力智能应用开发Jinja00
请把这个活动推给顶尖程序员😎本次活动专为懂行的顶尖程序员量身打造,聚焦AtomGit首发开源模型的实际应用与深度测评,拒绝大众化浅层体验,邀请具备扎实技术功底、开源经验或模型测评能力的顶尖开发者,深度参与模型体验、性能测评,通过发布技术帖子、提交测评报告、上传实践项目成果等形式,挖掘模型核心价值,共建AtomGit开源模型生态,彰显顶尖程序员的技术洞察力与实践能力。00
Kimi-K2.5Kimi K2.5 是一款开源的原生多模态智能体模型,它在 Kimi-K2-Base 的基础上,通过对约 15 万亿混合视觉和文本 tokens 进行持续预训练构建而成。该模型将视觉与语言理解、高级智能体能力、即时模式与思考模式,以及对话式与智能体范式无缝融合。Python00
MiniMax-M2.5MiniMax-M2.5开源模型,经数十万复杂环境强化训练,在代码生成、工具调用、办公自动化等经济价值任务中表现卓越。SWE-Bench Verified得分80.2%,Multi-SWE-Bench达51.3%,BrowseComp获76.3%。推理速度比M2.1快37%,与Claude Opus 4.6相当,每小时仅需0.3-1美元,成本仅为同类模型1/10-1/20,为智能应用开发提供高效经济选择。【此简介由AI生成】Python00
Qwen3.5Qwen3.5 昇腾 vLLM 部署教程。Qwen3.5 是 Qwen 系列最新的旗舰多模态模型,采用 MoE(混合专家)架构,在保持强大模型能力的同时显著降低了推理成本。00- RRing-2.5-1TRing-2.5-1T:全球首个基于混合线性注意力架构的开源万亿参数思考模型。Python00