C#导入.xls数据方法汇总二(将上传文件存到DataTable实例对象中)

C#导入.xls数据方法汇总二(将上传文件存到DataTable实例对象中)

创建各数据库实例对象,并创建一个studentVo实体类记录所有的上传数据

//查询出 学院,专业,年级,班级 的信息:用来根据名称获取对应的ID
List<SYS_Academe> dbAcademe = myModel.SYS_Academe.ToList();
List<SYS_Specialty> dbSpecialty = myModel.SYS_Specialty.ToList();
List<SYS_Grade> dbGrade = myModel.SYS_Grade.ToList();
List<SYS_Class> dbClass = myModel.SYS_Class.ToList();

//创建studentVo对象列表-》用于存放导入的学生/用户数据
List<studentVo> listStudentVo = new List<studentVo>();

获取到第一张工资表。并判断工作表是否有数据再进行下面的操作

//获取第一张工作表
ISheet sheet = workbook.GetSheetAt(0);
//判断工作表中是否有数据
//PhysicalNumberOfRows 获取的时物理行数,不包括那些空行(隔行)的情况
if (sheet.PhysicalNumberOfRows > 0){
}else{
	returnJson.Text = "工作表为空,请检查!";
}

1、创建一个DataTable对象实例
DataTable()表示内存中数据的一个表

//将数据先装到datatable中
// 定义datatable
DataTable dtExcel = new DataTable();

2、获取上传文件的表头信息

第一行一般为导入数据模板的说明,不算是表头数据

//获取工作表中的第二行(第一行是说明,索引为0)
IRow rowHeader = sheet.GetRow(1);

3、基本使用到的方法如下四个

FirstCellNum:获取某行第一个单元格下标
LastCellNum:获取某行的列数
FirstRowNum:获取第一个实际行的下标
LastRowNum:获取最后一个实际行的下标

4、获取到上传文件的列数和行数
在这里插入图片描述
上图有9列3行

//获取表格列数
int cellCount = rowHeader.LastCellNum;
//获取表格行数
int rowCount = sheet.LastRowNum + 1;

获取行数+1的意思就是跳过第二行的表头数据开始算起

5、循环获取到文件的第二行表头并给DataTable设置同样的表头

先要获取到上传文件表头列的名称,再将获取到的名称添加到DataTable作为表头
循环的次数就是获取到的文件列数

//循环添加标题行中各个单元格的值 -- 相当于定义数据库表的字段
for (var i = rowHeader.FirstCellNum; i < cellCount; i++)
{
     //创建dataTable中的列
     //通过遍历行中的每一个单元格,获取标题行各个单元格的数据
     DataColumn dtColumn = new DataColumn(rowHeader.GetCell(i).StringCellValue);
     //将获取到的标题行的数据放到datatable中;
     dtExcel.Columns.Add(dtColumn);
}

6、获取上传文件的数据内容

循环的次数是;上传数据的行数,不包括说明行和表头行
判断里面有一个isNull布尔变量的主要作用是记录上传的文件文件是否有空的数据,空的为true就不会添加到创建的DataTable里面,从而造成很多的空白数据出来

//查询出 学院,专业,年级,班级 的信息:用来根据名称获取对应的ID
List<SYS_Academe> dbAcademe = myModel.SYS_Academe.ToList();
List<SYS_Specialty> dbSpecialty = myModel.SYS_Specialty.ToList();
List<SYS_Grade> dbGrade = myModel.SYS_Grade.ToList();
List<SYS_Class> dbClass = myModel.SYS_Class.ToList();

//创建studentVo对象列表-》用于存放导入的学生/用户数据
List<studentVo> listStudentVo = new List<studentVo>();

//获取第一张工作表
ISheet sheet = workbook.GetSheetAt(0);
//判断工作表中是否有数据
//PhysicalNumberOfRows 获取的时物理行数,不包括那些空行(隔行)的情况
if (sheet.PhysicalNumberOfRows > 0){
//获取Excel表格中的数据行
//(sheet.FirstRowNum) 第一行是说明;第二行是标题;第三行开始才是数据信息
for (var j = sheet.FirstRowNum + 2; j < rowCount; j++)
{
    //获取数据行(3,4,5,6,......)数据
    IRow row = sheet.GetRow(j);

    //创建DataTable行
    DataRow dtRow = dtExcel.NewRow();

    if (row != null)
    {
       // 去空行变量
       bool isNull = true;
      //遍历行中所有的单元格,填入dtRow中
      for (var n = row.FirstCellNum; n < cellCount; n++)
      {
          if (row.GetCell(n) != null)
          {
               string cellVal = row.GetCell(n).ToString();
               dtRow[n] = cellVal;
               //去空行,如果行当中存在不为空的单元格,变量isNull为false,否则为true
               if (!string.IsNullOrEmpty(cellVal))
               {
                    isNull = false;
               }
          }
    	}
        if (!isNull)
        {
           //将b不为空的数据行dtRow填入dtExcel中
           dtExcel.Rows.Add(dtRow);
        }
     }
}

7、完整的将Excel表格数据放到DataTable中代码

#region 将Excel表格数据放到DataTable中

//将数据先装到datatable中
// 定义datatable
DataTable dtExcel = new DataTable();

//获取工作表中的第二行(第一行是说明,索引为0)
IRow rowHeader = sheet.GetRow(1);

//获取表格列数
int cellCount = rowHeader.LastCellNum;
//获取表格行数
int rowCount = sheet.LastRowNum + 1;

//循环添加标题行中各个单元格的值 -- 相当于定义数据库表的字段
for (var i = rowHeader.FirstCellNum; i < cellCount; i++)
{
         //创建dataTable中的列
         //通过遍历行中的每一个单元格,获取标题行各个单元格的数据
         DataColumn dtColumn = new DataColumn(rowHeader.GetCell(i).StringCellValue);
         //将获取到的标题行的数据放到datatable中;
         dtExcel.Columns.Add(dtColumn);
}

       //获取Excel表格中的数据行
       //(sheet.FirstRowNum) 第一行是说明;第二行是标题;第三行开始才是数据信息
for (var j = sheet.FirstRowNum + 2; j < rowCount; j++)
{
      //获取数据行(3,4,5,6,......)数据
      IRow row = sheet.GetRow(j);

      //创建DataTable行
      DataRow dtRow = dtExcel.NewRow();

     if (row != null)
     {
         // 去空行变量
         bool isNull = true;
         //遍历行中所有的单元格,填入dtRow中
         for (var n = row.FirstCellNum; n < cellCount; n++)
         {
              if (row.GetCell(n) != null)
              {
                  string cellVal = row.GetCell(n).ToString();
                  dtRow[n] = cellVal;
                  //去空行,如果行当中存在不为空的单元格,变量isNull为false,否则为true
                  if (!string.IsNullOrEmpty(cellVal))
                  {
                       isNull = false;
                  }
              }
          }
          if (!isNull)
          {
              //将b不为空的数据行dtRow填入dtExcel中
              dtExcel.Rows.Add(dtRow);
           }
	  }
}
#endregion
}
else {
      returnJson.Text = "工作表为空,请检查!";
}

你可能感兴趣的:(数据导入,c#,开发语言,后端)