导入数据

本文为新入门IT学者介绍数据导入操作。先阐述导入概念,接着详细讲解创建方法、工作簿,查询工作表,判断列表数据,读取Excel数据,判断数据准确性等步骤,还提及错误处理,最后总结操作并说明返回值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

                导入数据
开发工具与关键技术:VS     MVC
作者:彭春怡
撰写时间:2019/4/12

各位IT朋友们好。今天我给大家介绍的是导入数。数据的导入、导出,是IT学者必会的。不管是数据库的导入、导出,还是模板的导入、导出,。背后都是经过代码的操作完成的。只要你有明确的思路,对于你来说,这是就个很容易的操作。而现在的我,还需要跟随老师的思路来完成这个操作,下面的介绍呢是我在课堂上学到的一点知识,希望能给新入门的IT学者一点帮助,如果有不对的地方,欢迎指教,谢谢。
我个人对于导入的理解是,将需要的内容进行添加。就是跟添加内容差不多。 就是比添加的内容庞大。所以才要进行导入吧。
图1:创建一个方法
在这里插入图片描述
创建方法首先要一个关键字,public是创建方法的关键字。ActionResult是一个参数,然后给方法一个命名,“ImportExcel”是给方法的命名。过号里HttpPostedFileBase是充当类的基类,这些类提供对客户端已上载的单独文件的访问。file是文件。“ReturnJson returnJson = new ReturnJson();”是实例化returnJson。returnJson是自己命名的,自己喜欢命名什么就什么,除了关键字外。我这里是老师课堂上习惯性用实例化的ReturnJson把首写的大改为小写,作为实例化的对象。可能是比较方便吧。
方法创建完成后,给它一个try,try是捕抓错误的意思。Session.Remove(“ImportExcel”);是把Session中的ImportExcel移除。避免残留以前的数据。因为FileExtension是字符串,所以用string类型。“string fileExtension = Path.GetExtension(file.FileName);”一句代码的意思是fileExtension获取文件的名称。Path是包含文件或目录路径信息的string类型实例执行操作。这些操作要提供跨越平台的方式执行。GetExtension返回指定的字符串的 展名。
图2创建工作簿
在这里插入图片描述
If是如果的意思,“。xls”是文件的后缀。Equals是确定此实例是否与另一个指定的string对象相同。过号里面的fileExtension就是指定string类型对象。||后面的意思跟前面一样,就是文件后缀簿一样,图2的第一句代码的意思是判断“.xls”的文件与fileExtension字符串类型是否相同,或者判断的“.XLS”文件与fileExtension字符串类型是否相同。这里的判断是相同的。相同就执行下面的代码。
byte[] fileBytes = new byte[file.ContentLength];是声明二进制数组存放文件。byte[]是8位没有符号的字符,fileBytes是二进制存放的文件名,就是要声明的文件名字ConentLength是获取上载文件的大小。
file.InputStream.Read(fileBytes, 0, file.ContentLength):是将二进制的数组存放入fileBytes文件中。不过是首先把转入的文件转化为二进制,才能存入fileBytes文件中。
MemoryStream excelFileStream = new MemoryStream(fileBytes):这是创建流的方法,MemoryStream是创建并且支持文件存放区转化为流。excelFileStream是将二进制数组为流的名称。过号里fileBytes是二进制的文件。一句代码的意思是将存放在fileBytes文件里的二进制数组转化为内存流excelFileStream。
NPOI.SS.UserModel.IWorkbook workbook = new HSSFWorkbook(excelFileStream);将流转化为工作簿UserModel是NPOI插件里面的方法。后面是将文件转化为流的一个方法,workbook是给文件流的一个命名。一句代码的意思,将excelFileStream流转化为workbook工作簿。
图3查询工作簿中的工作表:
在这里插入图片描述
wrkbook是图2创建的工作簿,erOfSheet是workbook是封装从元数据。If如果的意思。如果wrkbook里封装的从元素NumberOfSheets大于0。查询下面的查询方法。因为要查询学院、专业、年级、班级四个的信息,所以用四个单表查询。第一个单表查询是从SYS_Academe表的查询出学院的信息。第二个表是从GetSheetAt(0)SYS_Spesialty表里面查询出专业信息。第三个查询的从SYS_Grade表里面查询出年级的信息。第四个查询是从SYS_Class表里面查询出班级的信息。
查询完毕,就是创建列表的对象。创建一个Student列表的对象。listStudentVo就是给列表的命名。“ist listStudentVo = new List();”这是创建列表的方法。
NPOI.SS.UserModel.ISheet sheet = workbook.GetSheetAt(0);是获取第一个工作簿的方法。NPOI.SS.UserModel是NPOI插件的一个方法。Sheet是列表的名称,workbook是图2创建的工作簿。GetSheetAt(0)是获取第一个的意思。一句代码的意思是sheet获取workbook的第一个列表。图3解释完毕。
图4:判断列表中是否有数据。
在这里插入图片描述
PhysicalNumberOfRows是sheet里面封装的从元素。如果sheet里面的从元素大于0,就执行下面的代码。 判断数据的数据准确性(学院 专业 年级 班级 表跟表之间的关系)。
DataTable dtExcel = new DataTable();是定义DataTable的方法。DataTable是表示一个内存中的数据表。dtExcel是定义Datanle的一个命名。
下面是将数据放入datatable中的步骤:
第一步:首先是获取标题的第二行:“NPOI.SS.erModel.IRow rowHeader = sheet.GetRow(1)”前面NPOI的方法。rowHeaber是自定义的命名。Sheet是列表,GetRow是索引的意思,sheet里面的第二行索引是1,所以过号里是1。一句代码的意思结合在一起,意思是自定义一个命名去获取sheet里面第一行的数据。
第二步:获取rowHeader里面的列。“int cellCount = rowHeader.LastCellNum;”ceCount是自定义的命名,为是字符串,所以用int类型。LstCellNum数获取表的最后一列。结合起来意思是自定义一个命名去获取rowHeader表格里面的最后一列。
第三步:获取表格的行数。“int rowCount = sheet.LastRowNum + 1;”首先给定义一个命名“rowCount”,sheet是表格,LsatRowNum是获取到表的最后一行,+1是当rowCount获取表格的最后一行,还要去获取上表头那行的数据。一句代码的意思是:定义一个命名,去获取sheet中的列。
第四步: 创建dataTable中的列,循环添加标题行中各个单元格的值。for是循环的意思,int声明的变量是i。并且i要从rowHeader的第一列开始执行。i < cellCount是指i的遍历循环次数少于cellCount数据源的条数。i++是指每循环一次,变量i自动加1。
下面呢是获取标题行的数据:“DataColumn dtColumn=new DataColumn(rowHeader.GetCell(i). StringCellValue)”DataColumn是DataTable表中的列的架构。dtColumn是自定义的命名。new前面的命名是新的。过号里rowHeader是前面获取标题行的表。StringCellValue是获取行的第一行的数据。就是索引为0的那行。一句代码的意思是定义一个新的命名,去获取rowHeader表里面的第一行数据。
第五步:先获取dtColumn的数据然后再把dtColumn添加到dtExcel里面去。
图5读取Excel的数据:
在这里插入图片描述
第一行跟图4是差不多的解释。因为图4与图5都是循环。Int声明i变量,并且i要从sheet里面+2的第一行开始执行,+2就是前面的两行不需要执行了。跟图4是一样的,i < rowCount是指i的遍历循环次数少于rowCount数据源的条数。i++是指每循环一次,变量i自动加1。然后是声明“row”来接收行的数据“GetRow(i)”。“DataRow dtRow = dtExcel.NewRow();”是创建新的框架。命名一个局部变量,接收dtRow然后创建一个新的框架。“NewRow();”意思是创建新的框架.DataRow就是新创建的框架。
然后如果row不等于空。Int声明j变量,j=row是等于FirstCellum。后面j < cellCount; j++跟上面i < rowCount; i++是一样的意思。里面再给它一个if,判断row中的GetCell(j)不为空。就执行“dtRow[j] = row.GetCell(j).ToString();”这句代码是给每个单元格赋值。“ToString”是返回当前对象的值。
图6判断数据的准确性:
在这里插入图片描述
foreach跟for是一样的,是循环的意思。过号里的是执行下面的代码的条件。DataRow是DataTable表里面的一行数据。过号里的意思呢是新建一个局部变量,获取dtExcel里面行的数据。Rows获取row里面的数据。下面是创建studentVo的对象,是为了保存每一条数据。首先是实例化一个局部变量“Student”。try是捕捉错误的意思。给它一个try捕捉下面代码的ID。首先获取你需要查询的内容,然后写出它们查询的条件,就可以查询你想要的ID了。里面都是查询的内容,如果有不明白,可看代码。
查询出来你想要的数据后,就从查询出来的数据里,把你想要的内容挑选出来。最后把listStudentVo的数据添加到student里面。给一个intSuccss++它记录成功的条数。++是每循环一次就进行一次添加。
因为里面的代码都是一样的就不细讲了。如有不明白,去看看查询的代码便可。
图7;
在这里插入图片描述
Catch是再执行的过程中如果发现错误的话。就会条到catch执行catch里面的代码。Exception是表示再执行的过程中发生的错误。Exception e就成为了局部变量。Console表示控制台的shur流、输出流、错误流,不过这个类不能被继承。WriteLine是将对象的文本形式写入标准输出流。就是把它获取到的对象的文本形式转递给e局部变量。intFail是记录失败的条数。如果数据出错,returnJson就返回false,提示“数据处理出错”。下面“Session[“ImportExcel”] = listStudentVo;”是把listStudentVo的数据保存到Session[“ImportExcel”]中。returnJson里面的封装的State就返回true。最后一句代码是提示导入的数据有多少条,匹配成功的条数,匹配失败的条数据。
总结:导入我就讲到这里了,下面还有三个else事件,一个catch信息这个大家都会得,就不细讲了。最后得返回值是return Json(returnJson, JsonRequestBehavior.AllowGet);大家应该明白的,每个方法都会有返回值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值