ASP.NET MVC的Excel工作簿导入
开发工具与关键技术:VS/MVC
作者:何桂朋
撰写时间:2019年4月11日
我认为ASP.NET MVC中,Microsoft Excel 工作表导入数据库,需要以下五步:
1、确定选中的是Excel表
2、确定Excel表有工作表(需要引用NPOI插件)
3、确定Excel表的表头数据是否与接收的表的字段名称对应(即是确定数据的准确性)
4、保存
一、确定选中的是Excel工作簿
要想知道获取的是不是Excel工作表,就要确认文件的类型。判断文件类型的方法就是判断文件类型后缀。
这里我用 Path中的GetExtension的方法,GetExtension的返回值为返回指定的路径字符串的扩展名的后缀。
2、确定 Excel工作簿有没有工作表(需要引用NPOI插件)
//声明二进制数组用于存放文件
byte[] Bytes = new byte[file.ContentLength];
//将传入的文件转化为二进制的数组存入Bytes
file.InputStream.Read(Bytes, 0, file.ContentLength);
//将二进制数组转化为内存流
MemoryStream excelFileStream = new MemoryStream(Bytes);
//将内存流转化为工作簿
NPOI.SS.UserModel.IWorkbook workbook = new HSSFWorkbook(excelFileStream);
//(2)最后确定 工作簿有没有工作表
if (workbook.NumberOfSheets>0)
因为控制器不能直接对Excel工作簿操作,所以先声明二进制数组,然后将传入的Excel工作簿转化为二进制的数组,将其保存到二进制数组中,再将二进制数组的Excel工作簿转化为内存流再将内存流转化为工作簿,最后确定 工作簿有没有工作表。
3、确定Excel表的表头数据是否与接收的表的字段名称对应(即是确定数据的准确性)
//获取第一个工作表
NPOI.SS.UserModel.ISheet sheet = workbook.GetSheetAt(0);
if (sheet.PhysicalNumberOfRows > 0) //判断工作表中是否有数据
{
DataTable dtExcel = new DataTable();// 定义datatable
//将数据先装到datatable中
//第一行是说明 第二行是表头,索引为1;
NPOI.SS.UserModel.IRow rowHeader = sheet.GetRow(1);
//获取表格列数
int cellCount = rowHeader.LastCellNum;
//获取表格行数
int rowCount = sheet.LastRowNum + 1;
//创建dataTable中的列,循环添加标题行中各个单元格的值
for(int i=rowHeader.FirstCellNum; i < cellCount; i++)
{
//通过遍历行中的每一个单元格,获取标题行各个单元格的数据
DataColumn dtColumn = new DataColumn(rowHeader.GetCell(i).StringCellValue);
//将获取到的标题行的数据放到datatable中
dtExcel.Columns.Add(dtColumn);
}
//读取Excel中的数据
//(sheet.FirstRowNum) 第一行是说明;第二行是标题;第三行开始才是数据信息
for(int i = (sheet.FirstRowNum)+2; i < rowCount; i++)
{
NPOI.SS.UserModel.IRow row = sheet.GetRow(i); //获取excel的所有行
DataRow dtRow = dtExcel.NewRow(); //创建DataTable行
if (row != null) //为了输入数据不为空
{
//遍历excel中一行的列的信息
for(int j=row.FirstCellNum; j<cellCount; j++)
{
if (row.GetCell(j) != null)
{
dtRow[j] = row.GetCell(j).ToString();
}
}
}
//将填入数据的dtRow添入dtExcel
dtExcel.Rows.Add(dtRow);
}
其实上述操作目的是:工作簿workbook转化成数组 ,存入dtExcel
然后,在数据库的表查询出 学院,专业,年级,班级 的信息:用来根据名称获取对应的ID
以查询出学院为例子:
//创建studentVo对象保存每一条数据
Student student = new Student();
//获取学院ID 和学院名称
student.AcademeName = row["学院"].ToString().Trim();
//通过dataTable中的AcademeName到dbAcademe中查找相应的AcademeID“”
student.AcademeID=dbAcademe.Where(p=>p.AcademeName==student.AcademeName).SingleOrDefault().AcademeID;
…………………………
//将每一条数据都添加到对象列表中
listStudentVo.Add(student);
剩下的保存和中间的查重、筛选,你可以根据自已的实际情况写吧。这篇《ASP.NET MVC的Excel工作簿导入》希望对你有帮助。