导入Excel表格数据

在使用软件的时候,有时会需要将本地Excel表格数据导入。而这个功能要怎么实现呢?接下来的内容可能会有所解惑。

这里我用一个学生信息的表格为例来讲解。在页面上的部分就不多说,主要看后台操作。

导入的数据是保存到数据库中,选择Excel表格文件提交到控制器,使用HttpPostedFileBase file为控制器参数接收文件。

1、声明二进制数组存放文件

byte[] fileBytes = new byte[file.ContentLength];以上载文件的大小声明数组;

 

2、将传入的文件转化为二进制的数组存入fileByres

file.InputStream.Read(fileBytes, 0, file.ContentLength);

 

3、将二进制的数组转化为内存流

MemoryStream excelFileStream = new MemoryStream(fileBytes);

 

4、将内存流转化为工作簿,利用NPOI

NPOI.SS.UserModel.IWorkbook workbook = new HSSFWorkbook(excelFileStream);

 

5、获取第一个工作表

NPOI.SS.UserModel.ISheet sheet = workbook.GetSheetAt(0);这里只导入一个表。

 

6、将数据封装到DataTable中,先声明dtExcel。

DataTable dtExcel = new DataTable();

 

7、获取标题行

NPOI.SS.UserModel.IRow rowHeader = sheet.GetRow(0);

 

8、获取表格列数

int cellCount = rowHeader.LastCellNum;

 

9、获取表格行数(最后一行下标+1)

int rowCount = sheet.LastRowNum + 1;

 

这样就把所有数据添加到了dtExcel中,然而仅仅得到表格文件的数据是不够的。因为要保存在数据库,也就是其中的各个表,所以表中的字段信息全部要获得。

根据所需字段(不可获得的除外)创建类,声明对象列表,存放导入的学生信息

List<studentVo> listStudentVo = new List<studentVo>();

 

遍历dataTable中的数据

foreach (DataRow row in dtExcel.Rows)

 

创建studentVo对象保存每一条数据

studentVo student = new studentVo();

 

根据名称使用Lambda表达式获取对应ID,将数据一一对应放入student中。

将每一条数据都添加到对象列表中

listStudentVo.Add(student);

 

之后就是按顺序的将数据保存到对应的各表了,具体就不过多赘述了。