导入Excel表格

导入Excel表格
开发工具与关键技术:Visual Studio 2015 导入Excel表格
作者:袁何恩
撰写时间:2019年5月14日
今天,我要和大家分享的技术是导入Excel表格。
我们做项目的时候,都不可避免地需要到导入Excel表格,Excel表格的导入涉及数据的转换,是把文件转换为二进制数组的模式,再把二进制数组转换内存流的模式,这其中需要引用NPOI的引用,因为我们需要用NPOI创建工作簿来接收内存流,就是把内存流转换为工作簿,再把工作簿的数据导入到为Excel表格里。我现在演示的是导入Excel的表格保存到浏览器的session中。
一、为了避免在取消文件上传的时候,依旧触发文件的上传,我们在视图这里给它一个判断来取消它,代码图如下:
在这里插入图片描述
图中“fileUploadExecl”是文本框的id。
二、上传Excel表格和数据类型的转化,
1、首先,在所在的input表签里添加’ accept=".xls" ’, ’ accept=".xls" ’是能规定能够通过文件上传进行提交的文件类型,还要在控制器的方法中添加“HttpPostedFileBase file”,这是获取页面上Excel表格的意思,“file”是是文本框的name,然后在控制器中声明“fileExtension”来接收。
2、引用NPOI,NPOI可以保证你在没有安装Office的时候,读取、处理Excel文件,所以我们要NPOI来对Excel文件进行处理。先引用NPOI,再写代码,为了避免代码出错。
3、数据类型的转化。把文件转换为二进制数组的模式,再把二进制数组转换内存流的模式,再用NPOI创建工作簿来接收内存流,把工作簿的数据导入到为Excel表格里。代码图如下:
在这里插入图片描述
图中“if()”是判断上传文件的后缀名,而“if{ }”里的第一行是声明二进制数组存放文件,第二行是将传入的文件转化为二进制的数组存入fileBytes,并且“file.ContentLength”是file这个文件内容的长度的意思;第三行是把file变量放入二进制的数组fileBytes里面,第四行是用NPOI创建工作簿来接收excelFileStream里面的内存流,就是把excelFileStream里面的内存流转换为工作簿的意思。
三、把数据到存入内存中的数据表中。
1、判断工作簿中是否有工作表后,利用NPOI创建第一个工作表,并获取到它。
2、获取工作表的标题行,这里我把数据表命名为DataTable,再获取表格里的列数和表格的行数,因为表格中的行数从0开始,所以我们需要再后面+1,创建DataTable表中的列,利用for循环,循环添加DataTable表标题行中各个单元格的数据,把值放进dtExcel表的列的集合里面。再用for循环获取Excel表格里每行的数据。代码图如下:
在这里插入图片描述
图中“rowHeader.FirstCellNum”是获取工作表的第一行数据的意思,“DataColumn dtColumn” 是创建单元格的意思,“rowHeader.GetCell(i)” 是获取表头行的第一单元格的意思,“StringCellValue”是获取单元格里的值的意思。
3、在用for循环获取Excel表格里每行单元格的数据,添加到DataTable表中之后,先判断如果第一个单元格row的值不会为空,就把第二行的第一个单元格的值转换为字符串,把字符串赋值给dtRow对应的单元格。代码图如下:
在这里插入图片描述
图中“dtRow”是行的意思,“row.FirstCellNum”是第二行的第一个单元格的下标的意思,“j<cellCount”是第二行的第一个单元格的下标小于表格的列数。
四、再用Linq表达式把找出对应的ID,查询出对应的信息:用来根据名称获取对应的ID,进行数据的比对。将每一条数据逐个添加到对象列表中,再将数据保存到session中,代码图如下:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值