ExcelDataReader开源项目完全使用指南
ExcelDataReader是一款轻量级且高效的C#库,专门用于读取Microsoft Excel文件。本指南将为您提供从项目结构到实际应用的完整学习路径。
项目架构深度解析
核心源码模块详解
ExcelDataReader采用模块化设计,主要包含以下核心组件:
核心读取引擎:src/ExcelDataReader/ - 提供底层Excel文件读取能力,支持多种Excel格式 数据扩展模块:src/ExcelDataReader.DataSet/ - 支持将数据填充到DataSet中
质量保障体系
项目拥有完善的测试套件,位于src/ExcelDataReader.Tests/目录,包含:
- 二进制Excel文件测试
- OpenXml格式测试
- CSV文件测试
- 严格模式验证测试
丰富的测试数据资源
项目提供了超过400个测试文件,覆盖各种Excel版本和复杂场景:
- 传统二进制格式(.xls) - BIFF2到BIFF8
- OpenXml格式(.xlsx, .xlsb) - Excel 2007及更新版本
- CSV文件格式
- 加密和受保护文件
快速启动与配置
依赖管理
通过NuGet包管理器安装ExcelDataReader:
- 基础包:ExcelDataReader - 提供核心读取接口
- 扩展包:ExcelDataReader.DataSet - 支持AsDataSet()方法
核心配置选项
读取器配置:
var reader = ExcelReaderFactory.CreateReader(stream, new ExcelReaderConfiguration()
{
FallbackEncoding = Encoding.GetEncoding(1252),
Password = "password",
AutodetectSeparators = new char[] { ',', ';', '\t', '|', '#' },
TrimWhiteSpace = true,
LeaveOpen = false
});
数据集配置:
var result = reader.AsDataSet(new ExcelDataSetConfiguration()
{
UseColumnDataType = true,
ConfigureDataTable = (_) => new ExcelDataTableConfiguration()
{
EmptyColumnNamePrefix = "Column",
UseHeaderRow = true
}
});
核心功能使用方法
基本读取模式
using (var stream = File.Open(filePath, FileMode.Open, FileAccess.Read))
{
using (var reader = ExcelReaderFactory.CreateReader(stream))
{
// 方法1:使用读取器方法逐行处理
do
{
while (reader.Read())
{
// 读取单元格数据
var value = reader.GetValue(0);
}
} while (reader.NextResult());
// 方法2:使用AsDataSet扩展方法
var dataSet = reader.AsDataSet();
}
}
CSV文件读取
使用专门的CSV读取器:
var reader = ExcelReaderFactory.CreateCsvReader(stream);
核心接口与功能
IExcelDataReader主要方法
Read()- 读取当前工作表的下一行NextResult()- 移动到下一个工作表ResultsCount- 返回工作簿中的工作表数量Name- 返回当前工作表的名称FieldCount- 返回当前工作表的列数RowCount- 返回当前工作表的行数
数据类型获取方法
GetFieldType()- 获取值的类型GetValue()- 以object形式返回值- 类型化方法:
GetDouble(),GetInt32(),GetBoolean(),GetDateTime(),GetString()
高级功能特性
格式信息获取
string GetFormattedValue(IExcelDataReader reader, int columnIndex, CultureInfo culture)
{
var value = reader.GetValue(columnIndex);
var formatString = reader.GetNumberFormatString(columnIndex);
if (formatString != null)
{
// 使用ExcelNumberFormat库进行格式化
return formatString;
}
return Convert.ToString(value, culture);
}
样式信息
通过GetCellStyle()方法获取单元格样式信息,包括:
- 缩进设置
- 水平对齐方式
- 隐藏状态
- 锁定状态
重要注意事项
从ExcelDataReader 2.x升级
升级到3.x版本时需要注意以下变更:
- 命名空间从
Excel改为ExcelDataReader - 需要引用ExcelDataReader.DataSet包来使用AsDataSet()
- 移除了IsFirstRowAsColumnNames属性
.NET Core兼容性
在.NET Core和.NET 5.0+中,需要添加以下配置:
System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);
支持的Excel文件格式
| 文件类型 | 容器格式 | 文件格式 | Excel版本 |
|---|---|---|---|
| .xlsx | ZIP, CFB+ZIP | OpenXml | 2007及更新版本 |
| .xlsb | ZIP, CFB | OpenXml | 2007及更新版本 |
| .xls | CFB | BIFF8 | 97, 2000, XP, 2003 |
| .xls | - | BIFF5 | 5.0, 95 |
| .xls | - | BIFF4 | 4.0 |
| .xls | - | BIFF3 | 3.0 |
| .xls | - | BIFF2 | 2.0, 2.2 |
| .csv | - | CSV | 所有版本 |
性能优化建议
- 内存管理:及时释放流和读取器资源
- 大数据处理:使用FilterRow回调实现进度指示
- 配置优化:根据实际需求调整AnalyzeInitialCsvRows参数
通过本指南,您将能够充分利用ExcelDataReader的强大功能,高效处理各种Excel文件读取需求。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



