public class ExcelBase
{
public List<TModel> ImportData<TModel>(Stream stream, string templatePath,string fileName, int begin = 2) where TModel : class, new()
{
IWorkbook workbook = null;
if(fileName.ToLower().EndsWith(".xlsx"))
workbook= new XSSFWorkbook(stream);
else
workbook = new HSSFWorkbook(stream);
ISheet sheet = workbook.GetSheetAt(0);
List<TModel> lst = new List<TModel>();
int rowNum = sheet.LastRowNum;
bool flag = true;
for (int i = begin; i <= rowNum; i++)//第一行为标题,第二行为列名,不进行取数据
{
flag = true;
TModel model = ExcelUtil.CreateFromExcel<TModel>(templatePath, (column, symbol) =>//symbol:2日期时间格式
{
try
{
object value = null;
ICell cell = sheet.GetRow(i).GetCell(column);
if (cell != null)
{
if (symbol == 2)//日期时间格式
{
if (cell.CellType == CellType.Blank)
return null;
DateTime time;
if (cell.CellType == CellType.Numeric)
{
if (DateUtil.IsValidExcelDate(cell.NumericCellValue))
{
time = cell.DateCellValue;
}
else
{
time = DateUtil.GetJavaDate(cell.NumericCellValue);
}
}
else if (cell.CellType == CellType.String)
{
time = DateTime.Parse(cell.StringCellValue);
}
else if (cell.CellType == CellType.Formula)
{
time = DateTime.Parse(cell.NumericCellValue.ToString());
}
else
{
time = DateTime.Parse(cell.ToString());
}
return time;
}
else
{
switch (cell.CellType)
{
case CellType.Boolean:
{
value = cell.BooleanCellValue;
break;
}
case CellType.Numeric:
{
DecimalFormat df = new DecimalFormat("#.#####");
System.Globalization.CultureInfo cf = new System.Globalization.CultureInfo("ZH-CN", true);
value = df.Format(cell.NumericCellValue, cf);
//value = cell.NumericCellValue;
break;
}
case CellType.String:
{
value = cell.StringCellValue ?? string.Empty;
break;
}
case CellType.Formula:
{
value = cell.NumericCellValue.ToString() ?? string.Empty;
break;
}
default:
{
value = cell.ToString();
break;
}
}
}
}
return value;
}
catch (Exception ex)
{
flag = false;
return null;
}
}, rowNum);
if (!flag)
{
//errorList.Add(model);
}
else if (model != null)
{
lst.Add(model);
}
else
{
continue;
}
}
return lst;
}
}