开发工具与关键技术:VS2015,ASP.NET MVC撰写时间:2019年5月24日

通过网页页面把Execl的数据导入到数据库。
在导入数据之前要先设计出一个导入数据的Excel模板,写入数据就规定按照此模板写入。
把设计好的模板放入到项目的文件夹中。
接着写一个下载模板的代码,调用浏览器下载窗口,进行下载模板

 public ActionResult DownImportTemplate(){//Server  系统//MapPath  自动找到这个项目所在路径string filePath = Server.MapPath("~/Document/Template/英雄信息导入模板.xls");//因为是文件 所以要转换成流.所以要用到IO流if (System.IO.File.Exists(filePath))//判断此文件是否存在,并判断是否能用IO流输出{//把这个路径转换成文件的名字  Path 路径  GetFileName 获取文件名string strFileName = Path.GetFileName(filePath);//文件返回可以接收三个参数,前面是具体返回的值,中间是返回的类型,最后可以读取文件的长度return File(new FileStream(filePath, FileMode.Open), "application-octet-stream", strFileName);//FileStream 文件流   FileMode 下载文件的模态框   Open,在点击下载模板是自动打开下载浏览器自带的下载框   //application-octet-stream 通过流的格式返回//strFileName 文件名字}else{return Content("模板文件不存在,请联系系统运维人员");}}

效果图:

接下来就是把模板填好
把数据导入到数据库。

public ActionResult EnterHeroData(HttpPostedFileBase file){Fantasy fancy = new Fantasy();fancy.State = false;try{//把session中的ImportExcel移除避免残留以前数据Session.Remove("IportExcel");//获取文件的后缀//判断是否是Excel//上传的工作簿的格式必须是 .xlsstring fileExtension = System.IO.Path.GetExtension(file.FileName);//判断类型是不是  .xls//Equals  等于   判断前后是否相等if (".xls".Equals(fileExtension)||".XLS".Equals(fileExtension)){//声明二进制数组存放文件  数组的长度以文件的长度决定byte[] fileBytes = new byte[file.ContentLength];//将传入的文件转化为二进制的数组存入fileBytesfile.InputStream.Read(fileBytes, 0, file.ContentLength);//InputStream IO流读取//将二进制数组转化为内存流System.IO.MemoryStream excelFileStream = new System.IO.MemoryStream(fileBytes);//MemoryStream 内存流//将内存流转化为工作簿NPOI.SS.UserModel.IWorkbook workbook = new HSSFWorkbook(excelFileStream);//判断工作簿里是否有工作表//NumberOfSheets > 0 工作表的数量是否大于零//Number 数量   sheets  工作表if (workbook.NumberOfSheets>0){//查询出 英雄所在阵营ID 英雄技能ID 伤害类型ID 攻击方式ID 英雄点券ID 英雄金币IDList<A01_HeroSame> dbHeroSame = (from tbHeroSame in myModel.A01_HeroSameselect tbHeroSame).ToList();List<A02_HeroType> dbHeroType = myModel.A02_HeroType.ToList();List<A03_HeroSkill> dbHeroSkill = myModel.A03_HeroSkill.ToList();List<A04_HeroCapability> dbHeroCapability = myModel.A04_HeroCapability.ToList();List<A05_HeroBattle> dbHeroBattle = myModel.A05_HeroBattle.ToList();List<A06_HeroMoney> dbHeroMoney = myModel.A06_HeroMoney.ToList();List<A07_HeroGold> dbHeroGold = myModel.A07_HeroGold.ToList();//对象列表List<HeroData> listHero = new List<HeroData>();//获取第一个工作表  下标为零NPOI.SS.UserModel.ISheet sheet = workbook.GetSheetAt(0);//判断工作表中是否有数据if(sheet.PhysicalNumberOfRows > 0){//工作表有数据//定义DataTableDataTable dtExcel = new DataTable();//获取标题行---  第二行,索引为1;第一行是说明NPOI.SS.UserModel.IRow rowHeader = sheet.GetRow(1);//获取表格的列数int cellCount = rowHeader.LastCellNum;//LastCellNum 最后一个单元格是多大就获取列数是多大//获取表格行数int rowCount = sheet.LastRowNum + 1;//因为有个导入说明,所以要加1//用到两个for循环,因为行和列//创建dataTable中的列,循环获取表头中各个单元格的值//获取列//FirstCellNum 从第一列开始读取for (int i = rowHeader.FirstCellNum; i < cellCount; i++){//通过遍历行中的每一个单元格,获取表头中的各个单元格的值DataColumn dtColumn = new DataColumn(rowHeader.GetCell(i).StringCellValue);//将获取到的所有标题列数据放到datatable中;dtExcel.Columns.Add(dtColumn);//Columns  获取有所有列}//获取行//(sheet.FirstRowNum) + 2 第一行是说明  第二行是表条(标题)第三行才是数据,所以要+2for (int i = (sheet.FirstRowNum)+2; i < rowCount; i++){//获取行的数据NPOI.SS.UserModel.IRow row = sheet.GetRow(i);DataRow dtRow = dtExcel.NewRow();if(row != null){//遍历excel中一行的所有单元格for (int  y = row.FirstCellNum;  y < cellCount; y++){//行中的每一个单元格都不为空if(row.GetCell(y) != null) {dtRow[y] = row.GetCell(y).ToString();}}}//将数据装到DataTable中//将填入数据的dtRow添入dtExceldtExcel.Rows.Add(dtRow);//Rows 获取所有行}int intSuccess = 0; //记录导入成功的条数int intFail = 0;//记录导入失败的条数 //数据的准确性foreach (DataRow row in dtExcel.Rows){//创建studentVo对象保存每一条数据HeroData Hero = new HeroData();try{//英雄所在阵营 和 获取英雄所在阵营IDHero.HeroSame = row["英雄所在阵营"].ToString().Trim();//通过dataTable中的HeroSame到dbHeroSame中查找相应的HeroSameIDHero.HeroSameID = dbHeroSame.Where(m => m.HeroSame.Trim() == Hero.HeroSame).SingleOrDefault().HeroSameID;Hero.HeroCapability = row["伤害类型"].ToString().Trim();Hero.HeroCapabilityID = dbHeroCapability.Where(m => m.HeroCapability.Trim() == Hero.HeroCapability).SingleOrDefault().HeroCapabilityID;Hero.HeroBattle = row["攻击方式"].ToString().Trim();Hero.HeroBattleID = dbHeroBattle.Where(m => m.HeroBattle.Trim() == Hero.HeroBattle).SingleOrDefault().HeroBattleID;Hero.HeroMoney = row["英雄点券"].ToString().Trim();var HeroMoney = Convert.ToDecimal(Hero.HeroMoney);Hero.HeroMoneyID = dbHeroMoney.Where(m => m.HeroMoney == HeroMoney).SingleOrDefault().HeroMoneyID;Hero.HeroGold = row["英雄金币"].ToString().Trim();var HeroGold = Convert.ToDecimal(Hero.HeroGold);Hero.HeroGoldID = dbHeroGold.Where(m => m.HeroGold == HeroGold).SingleOrDefault().HeroGoldID;Hero.HeroTitle = row["英雄昵称"].ToString().Trim();Hero.HeroName = row["英雄名字"].ToString().Trim();Hero.HeroAddTime = row["英雄加入时间"].ToString().Trim();var HeroAddTimeLS = Convert.ToDateTime(Hero.HeroAddTime);Hero.PassiveSkill = row["被动技能"].ToString().Trim();Hero.SkillQ = row["技能Q"].ToString().Trim();Hero.SkillW = row["技能W"].ToString().Trim();Hero.SkillE = row["技能E"].ToString().Trim();Hero.SkillR = row["技能R"].ToString().Trim();//将每一条数据都添加到对象列表中listHero.Add(Hero);intSuccess++;//记录成功的条数}catch (Exception){intFail++;fancy.State = false;fancy.Text = "数据处理出错";}}//把数据保存到Session当中Session["ImportExcel"] = listHero;fancy.State = true;fancy.Text = String.Format("文件中共有" + dtExcel.Rows.Count + "条英雄数据,导入成功" + intSuccess + "条,导入失败" + intFail + "条");}else{fancy.Text = "工作表中没有数据";}}else{fancy.Text = "工作簿中没有工作表"; }}else{fancy.Text = "选择的文件类型不正确";}}catch (Exception e){Console.WriteLine(e);fancy.State = false;fancy.Text = "上传失败,类型不对应;请检查是否有工作簿,是否有数据,是否按照模板填写";}return Json(fancy,JsonRequestBehavior.AllowGet);}

以上是控制器这边完整的数据导入代码
以上的代码只需要根据自己的需要进行更改套用就好

从Excel导入数据到数据库相关推荐

  1. 通过java将Excel表格导入数据到数据库

    文章目录 一.首先.我们使用到的是apache的开源框架<poi> excel导入数据到数据库原理. demo案例:(内附注释) 实体类 数据导入解析工具类 实例业务接口如下 一.首先.我 ...

  2. java操作mysql导表_Java实现批量导入excel表格数据到数据库中的方法

    本文实例讲述了Java实现批量导入excel表格数据到数据库中的方法.分享给大家供大家参考,具体如下: 1.创建导入抽象类 package com.gcloud.common.excel; impor ...

  3. SpringBoot提供接口实现Excel导入数据并存储到数据库中

    SpringBoot提供接口实现Excel导入数据并存储到数据库中 完整项目文件 1 效果展示 1.1 Excel数据 zxy.xlsx 1.2 导入后数据库中数据 CREATE TABLE `use ...

  4. 使用PhpSpreadsheet将Excel导入到MySQL数据库

    使用PhpSpreadsheet将Excel导入到MySQL数据库 日常开发中,我们经常遇到这样的场景,需要将一个Excel表格数据如客户信息.学生成绩表导入到系统数据库中,然后在系统中进行进一步操作 ...

  5. Excel导入数据轻松生成智能图表,助力数据分析

    运营助手,Excel导入数据轻松生成智能图表,助力数据分析 2023-04-18 10:21·淡定海风L 智能问答BI是一种先进的数据分析,它可以帮助用户快速地从海量数据中获取有用的信息,并将其可视化 ...

  6. Excel导入数据时间格式问题处理

    问题背景:java中使用poi进行excel导入数据时,日期格式在数据库中存放为varchar2类型.问题:存放数据日期读取数据为"44439"的数字,因判断格式类型为yyyy-m ...

  7. sqlserver excel导入数据时有null,为空值

    sqlserver excel导入数据时有null,最完美解决办法 1.说明为什么会出现导入的数据会为null? 因为在数据库导入数据时,他会自动检测数据的类型,文字一般检测为nvarchar类型,而 ...

  8. excel导入数据校验_使用Excel数据验证限制日期范围

    excel导入数据校验 Yesterday, one of my clients emailed to let me know that she was having trouble entering ...

  9. Excel导入数据,未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序

    Excel导入数据,未在本地计算机上注册"Microsoft.Jet.OLEDB.4.0"提供程序: .NET在导入Excel时,使用了一个Microsoft.Jet.OLEDB. ...

最新文章

  1. ASP.NET网页中RAR、DOC、PDF等文件下载功能实例源代码
  2. Devoxx 2012:Java 8 Lambda和并行性,第1部分
  3. 数字U家,即刻出发!2022联合利华黑客马拉松报名倒计时!
  4. 图论最短路及生成树(Prim,Djikstra,Spfa,Bellan-ford,kruskal,topsort)
  5. 力扣-222. 完全二叉树的节点个数
  6. 区块链入门教程(1)--概述
  7. 一年Java的阿里电话面试全纪录
  8. 项目经理面试的一些问题讨论
  9. 已知两边求角度公式_有30度角的直角三角形,已知一直角边,求另两边的公式,快速求法...
  10. python基础刻意练习--Task 6 字典与集合
  11. RV-LINK:输出非预期响应向 GDB 报告错误
  12. 机器学习中的F1-score
  13. 【单目标优化求解】基于matlab增强型黑猩猩优化器算法求解单目标优化问题【含Matlab源码 2013期】
  14. 5OSPF的邻居和NBMA环境下的邻居
  15. http(https)请求响应状态码
  16. Linux基本指令总结
  17. Cobalt Strike:解密 DNS 流量——第 5 部分
  18. buck电路闭环pi控制matlab图,BUCK电路闭环控制系统的MATLAB仿真
  19. 三维重建开源软件介绍
  20. html中新闻标题字数的限制,微博再无140字数限制 2月28号全面开放

热门文章

  1. 字符串String s =sfds55d676455dfg32434eertre; 怎么样把非数字全部去除,只保留数字?
  2. Probably Approximately Correct learning framework
  3. 营收输给小米、多元化屡战屡败,格力电器还有翻身的机会吗?
  4. 程序员版孔乙己(故事小篇)
  5. java 编译期常量
  6. dlsym RTLD_DEFAULT
  7. 互联网晚报 | 10月17日 星期日 | 锤子论坛宣布下线;《长津湖》跻身中国影史票房前四;华为云专属月·行业深耕专项行动开启...
  8. 计算机CPU指令的32位、64位是如何区分呢?
  9. master主节点初始化报错 /proc/sys/net/ipv4/ip_forward contents are not set to 1
  10. android ui设计与开发工具,Android用户体验与UI设计