IExcelRead
信息
由于使用了 NPOI,EPPlus,MiniExcel
三种实现, 所以简单封装了一个 IExcelRead
, 试图简化使用
暂时来看是有效果的,对我来说效果非常好
接口定义
信息
IExcelRead
的定义类似下面这样
public interface IExcelRead<T> : IDisposable
{
IEnumerable<T> this[string field] { get; }
IEnumerable<T> this[long row] { get; }
T this[long row, long col] { get; }
T this[string field, long row] { get; }
IEnumerable<string> Headers { get; }
IDictionary<string, int> HeadersWithIndex { get; }
long RowCount { get; }
}
为了方便使用, 又有
public interface IExcelRead : IExcelRead<string> { }
会将 excel 中的所有数据都 ToString
提示
最佳实践中的导入功能就是依据 IExcelRead 实现的
获取 IExcelRead 实例
备注
现阶段拥有 NPOIExcelRead EPPlusExcelRead MiniExcelRead
三种实现
using IExcelRead reader = new NPOIExcelRead(filePath);
using IExcelRead reader = new EPPlusExcelRead(filePath);
using IExcelRead reader = new MiniExcelRead(filePath);
使用
获取单元格的值
// 第 1 行 第 6 列
string value = reader[0, 5];
获取行
var row = read[0];
获取列
信息
我认为"列"与"行"不同, 是不适合直接用下标去获取的, 所以设计成传有"含义"的列名称
IEnumerable<string> col = read["Column"];
警告
尝试使用yield return
降低性能损耗, 但是有没有效果, 有多大效果, 这我就不知道了, 暂时也没有能力去验证
危险
MiniExcelRead 由于 MiniExcel 的实现问题,在获取超出原表格范围的单元格数据时,可能会出现异常
实现了 IEnumerable
备注
花了点时间实现了 IEnumerable 接口
数据类型为 IEnumerable<string>
现在 IExcelRead
支持使用 First() Last() 等集合方法了!
IExcelRead reader = new MiniExcelRead(path);
reader.Count();
var IEnumerable<string> firstData = reader.First();
var IEnumerable<string> lastData = reader.Last();
var IEnumerable<string> skipOne = reader.Skip(1).First()
提示
由于实现了 IEnumerable
,所以也可以使用一些 Collapsenav.Net.Tool
的方法
IExcelRead reader = new MiniExcelRead(path);
IEnumerable<string> mergeData = reader.Merge()
警告
由于实现问题,有些操作无法使用,比如 AddRange
之类存在修改操作的方法
后面可能会做这些方便的实现