在.NET的应用中,包括 MVC.NET和.NETcore,经产需要读取Excel文件。目前常用的方法中最重要的是使用NPOI来完成。
我们可以定义一个ExcelHelper类完成Excel文件的读取,方法如下
public static class ExcelProcessor
{
public static IEnumerable<T> ExcelToEntities<T>(Stream excelStream, string fileName, Func<IRow, T> rowToEntity, Func<ISheet, int> getStartRow = null)
{
var result = new List<T>();
try
{
IWorkbook workBook = null;
if (fileName.EndsWith(".xlsx", StringComparison.CurrentCultureIgnoreCase))
{
workBook = new XSSFWorkbook(excelStream);
}
else if (fileName.EndsWith(".xls", StringComparison.CurrentCultureIgnoreCase))
{
workBook = new HSSFWorkbook(excelStream);
}
if (workBook != null)
{
var sheet = workBook.GetSheetAt(0);
var start = getStartRow?.Invoke(sheet) ?? 1;
for (var i = start; i <= sheet.LastRowNum; i++)
{
var row = sheet.GetRow(i);
result.Add(rowToEntity(row));
}
}
return result;
}
catch (Exception e)
{
Console.WriteLine(e);
throw;
}
}
}
其中,Func<IRow, T> rowToEntity为传入的一个函数,将Excel文件中的一行转换成为对象。Func<ISheet, int> getStartRow = null用来根据Excel的sheet,决定从那行开始读取。
函数的结构保存在一个IList<T>中。