一、先引入Nuget包 (NPOI)
二、书写读取Excel文件的方法
public static Object ImportFile(IFormFile file)
{
bool result = true ;
string fileExt = Path.GetExtension(file.FileName).ToLower();
//定义一个集合一会儿将数据存储进来,全部一次丢到数据库中保存
MemoryStream ms = new MemoryStream();
file.CopyTo(ms);
ms.Seek(0, SeekOrigin.Begin);
IWorkbook book;
if (fileExt == ".xlsx")
{
book = new XSSFWorkbook(ms);
}
else if (fileExt == ".xls")
{
book = new HSSFWorkbook(ms);
}
else
{
return "文件格式错误,请检查后重新上传";
}
ISheet sheet = book.GetSheetAt(0);
int CountRow = sheet.LastRowNum + 1;//获取总行数
for (int i = 1; i < CountRow; i++)
{
//获取第i行的数据
var row = sheet.GetRow(i);
//一般第一行都是 文字描述的表头,每一列代表啥
if (row != null && row.GetCell(0) != null && row.GetCell(0).ToString().Trim().Length > 0)
{
//循环的验证单元格中的数据
for (int j = 0; j < 2; j++) //时间不是必传,所以不用验证判断为空,所以只验证前两列就行
{
if (row.GetCell(j) == null || row.GetCell(j).ToString().Trim().Length == 0)
{
result &= false;
}
if (i == 1)
{
string str = sheet.GetRow(0).GetCell(j).ToString().Trim();
bool f = false;
switch (j)
{
case 0:
f = str != "学校名称";
break;
case 1:
f = str != "状态";
break;
case 2:
f = str != "有效期-开始(eg.2022-2-2 12:00:00)";
break;
case 3:
f = str != "有效期-结束(eg.2022-2-2 12:00:00)";
break;
default:
break;
}
if (f) return "文件错误,请使用下载的模板文件进行数据填充上传";
}
}
}
else
{
CountRow = i;
}
}
if (result)
{
List<School> addSchools = new List<School>(); // 需要新增的学校
for (int i = 1; i < CountRow; i++)
{
var row = sheet.GetRow(i);
School school = new School()
{
Id = Guid.NewGuid().ToString("d"),
Name = row.GetCell(0).ToString().Trim(),
};
switch (row.GetCell(1).ToString().Trim())
{
case "是":
school.Status = 0;
break;
case "否":
school.Status = 1;
break;
}
if (school.Status == 2)
{
if (!string.IsNullOrEmpty(row.GetCell(2).ToString()))
{
school.StartTime = Convert.ToDateTime(row.GetCell(2).DateCellValue.ToString().Trim());
}
if (!string.IsNullOrEmpty(row.GetCell(3).ToString()))
{
school.EndTime = Convert.ToDateTime(row.GetCell(3).DateCellValue.ToString().Trim());
}
}
addSchools.Add(school);
}
return addSchools;
}
else
{
return "文件错误!请选择正确的文件进行导入";
}
}
//大家可以根据自己的需求 略微修改我代码中的部分逻辑
三、书写接口调用此方法即可
这是我的Excel表数据
//可以看到我的数据已经读取出来了