ASP.NET MVC的Excel工作簿导入

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工作簿导入》希望对你有帮助。

猜你喜欢

转载自blog.csdn.net/weixin_44550157/article/details/89297415
今日推荐