这个操作的大致步骤是把本地文件存入到服务器端,
然后再读取服务端的文件并且使用NPOI这个第三方的插件去读取文件导入到数据库批量插入
需要注意的是,前端需要使用form包裹type=file的文件标签,并且文件标签需要有name属性,否则后台无法获取,在一个就是form需要含有enctype="multipart/form-data"属性,
对于input过滤其他非excel的文件,可以添加如下属性:accept="application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"

HTML:

  1. <form id="form" class="form-horizontal" enctype="multipart/form-data">
  2. <div class="form-group">
  3. <label for="txt_signInTitleOfDetail">选择文件</label>
  4. <input type="file" name="file" class="form-control" accept="application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" />
  5. </div>
  6. <input type="button" class="btn btn-primary" value="保存" id="btn_Save">
  7. </form>

JS:

  1. //这里的HTMLFormElement是强制转换的写法,因为是typescript所以不强制转换的话编译不能通过
  2. var myForm = <HTMLFormElement>$('#你的要提交的form的ID')[0];
  3. var formData = new FormData(myForm);//和后台联通让后台接受form的系统类
  4. //获取文件名
  5. var filePath = $('#txt_upload').val();
  6. var fileName = filePath.substring(filePath.lastIndexOf('\\') + 1);
  7. formData.append('fileName', fileName);
  8. $('#waring').text("操作中,请等待");
  9. $.ajax({
  10. url: '/Home/后台的导入方法',
  11. type: 'POST',
  12. cache: false,
  13. data: formData,
  14. processData: false,
  15. contentType: false
  16. }).done(function (res) {
  17. //批量导入后刷新页面
  18. $('#waring').text(res.message);
  19. }).fail(function (res) {
  20. $('#waring').text("导入数据失败");
  21. });

后台:

  1. public JsonResult 你的方法()
  2. {
  3. var httpRequest = HttpContext.Request;
  4.  
  5. string fileName = string.Format("{0}_{1}", DateTime.Now.ToString("yyyyMMddHHmmss"), httpRequest.Form["fileName"].ToString());
  6. //文件夹
  7. string dir = Server.MapPath("~/temp");
  8. if (!Directory.Exists(dir))
  9. {
  10. Directory.CreateDirectory(dir);
  11. }
  12.  
  13. //文件全路径,获取了本地的文件路径
  14. string filePath = Path.Combine(dir, fileName);
  15.  
  16. foreach (string key in httpRequest.Files) // 文件键
  17. {
  18. var postedFile = httpRequest.Files[key]; // 获取文件键对应的文件对象
  19. postedFile.SaveAs(filePath);
  20. }
  21. //// 读取Excel文件,导入数据
  22. ExcelToDB(filePath);
  23.  
  24. return Json(new
  25. {
  26. status = true,
  27. message = "导入成功!"
  28. });
  29. }
  30.  
  31. private void ExcelToDB(string filePath)
  32. {
  33. FileStream fs = null;
  34. IWorkbook workbook = null;
  35. ISheet sheet = null;
  36. IRow row = null;
  37. //ICell cell = null;
  38. int startRow = ;
  39. try
  40. {
  41. using (fs = System.IO.File.OpenRead(filePath))
  42. {
  43. // 2007版本
  44. if (filePath.IndexOf(".xlsx") > )
  45. workbook = new XSSFWorkbook(fs);
  46. // 2003版本
  47. else if (filePath.IndexOf(".xls") > )
  48. workbook = new HSSFWorkbook(fs);
  49.  
  50. if (workbook != null)
  51. {
  52. workbook.MissingCellPolicy = MissingCellPolicy.RETURN_BLANK_AS_NULL;
  53. //sheet = workbook.GetSheetAt(0);//读取第一个sheet,当然也可以循环读取每个sheet
  54. sheet = workbook.GetSheet("Sheet1");
  55.  
  56. if (sheet != null)
  57. {
  58. int rowCount = sheet.LastRowNum;//总行数
  59. if (rowCount > )
  60. {
  61. IRow firstRow = sheet.GetRow();//第一行
  62. int cellCount = firstRow.LastCellNum;//列数
  63.  
  64. WriteData(sheet, row, startRow, rowCount);
  65. }
  66. else
  67. {
  68. throw new Exception("无信息");
  69. }
  70. }
  71. else
  72. {
  73. throw new Exception("没有找到Sheet1");
  74. }
  75. }
  76. else
  77. {
  78. throw new Exception("加载Excel失败");
  79. }
  80. }
  81.  
  82. }
  83. catch (Exception ex)
  84. {
  85. if (fs != null)
  86. {
  87. fs.Close();
  88. }
  89.  
  90. throw ex;
  91. }
  92. }
  93.  
  94. /// <summary>
  95. /// 从excel写入登记表
  96. /// </summary>
  97. /// <param name="sheet"></param>
  98. /// <param name="row"></param>
  99. /// <param name="startRow"></param>
  100. /// <param name="rowCount"></param>
  101. /// <param name="isCover"></param>
  102. private void WriteData(ISheet sheet, IRow row, int startRow, int rowCount)
  103. {
  104. List<你的插入类> 你的插入类 = new List<你的插入类>();
  105. string Title = string.Empty;
  106. string Time = string.Empty;
  107. string EndTime = string.Empty;
  108. string Range = string.Empty;
  109. //填充行
  110. for (int i = startRow; i <= rowCount; ++i)
  111. {
  112. row = sheet.GetRow(i);
  113. if (row == null) continue;
  114.  
  115. try
  116. {
  117. //读取一行每个字段值
  118. Title = row.GetCell(, MissingCellPolicy.CREATE_NULL_AS_BLANK).ToString(); //
  119. Time = row.GetCell(, MissingCellPolicy.CREATE_NULL_AS_BLANK).ToString();//
  120. EndTime = row.GetCell(, MissingCellPolicy.CREATE_NULL_AS_BLANK).ToString();//
  121. taskType = ;//
  122. signInRange = row.GetCell(, MissingCellPolicy.CREATE_NULL_AS_BLANK).ToString();//
  123.  
  124. //没有信息,直接跳过
  125. if (string.IsNullOrEmpty(Title) || string.IsNullOrEmpty(Time) || string.IsNullOrEmpty(EndTime))
  126. {
  127. continue;
  128. }
  129.  
  130. info item = new info()
  131. {
  132. 读取的行在这里和实体类赋值
  133. };
  134.  
  135. list.Add(item);
  136. }
  137. catch (Exception ex)
  138. {
  139.  
  140. }
  141. }
  142.  
  143. //批量插入
  144. Dal.BatchInsert(list);
  145. }

excel 在web导入到数据库的操作方法的更多相关文章

  1. 把Excel的数据导入到数据库

    将Excel作为数据源,将数据导入数据库,是SSIS的一个简单的应用,下图是示例Excel,数据列是code和name 第一部分,Excel中的数据类型是数值类型 1,使用SSDT创建一个packag ...

  2. Excel表格数据导入Mysql数据库的方法

    1.使用Navicat 连接需要导入的数据库. 2.excel 列的名字最好和数据库的名字一致,便于我们直观的查看好理解.   第一步,先创建好表,和准备好对应的excel文件.在Navicat 中选 ...

  3. java读取excel文件数据导入mysql数据库

    这是我来公司的第二周的一个小学习任务,下面是实现过程: 1.建立maven工程(方便管理jar包) 在pom.xml导入 jxl,mysql-connector 依赖 可以在maven仓库搜索 2.建 ...

  4. Excel表格数据导入MySQL数据库

    有时候项目需要将存在表格中的批量数据导入数据库,最近自己正好碰到了,总结一下: 1.将excel表格另存为.csv格式文件,excel本身的.xlsx格式导入时可能会报错,为了避免不必要的格式错误,直 ...

  5. ASP.NET MVC NPOI导入Excel DataTable批量导入到数据库

    使用NPOI导入Excel 首先在MVC项目中导入NPOI 查询NPOI安装,排序依据,选择:最高下载量,选择第一个. 在控制器中创建ExcelController 在Index视图中写入代码: @u ...

  6. Java版将EXCEL表数据导入到数据库中

    1.采用第三方控件JXL实现 try { //实例化一个工作簿对象 Workbook workBook=Workbook.getWorkbook(new File("F://qzlx.xls ...

  7. C#将Excel数据表导入SQL数据库的两种方法(转)

    最近用写个winform程序想用excel 文件导入数据库中,网上寻求办法,找到了这个经过尝试可以使用. 方法一: 实现在c#中可高效的将excel数据导入到sqlserver数据库中,很多人通过循环 ...

  8. 将excel的数据导入到数据库后都乱码了是怎么回事

    将excel内容首先保存成csv格式,然后在MySQL数据库中导入,结果汉字出现了乱码. 解决过程: 1.csv文件以txt形式打开,另存为,选择utf-8编码. 2.数据库,设置,collation ...

  9. C#将Excel数据表导入SQL数据库的两种方法

    最近用写个winform程序想用excel 文件导入数据库中,网上寻求办法,找到了这个经过尝试可以使用. 方法一: 实现在c#中可高效的将excel数据导入到sqlserver数据库中,很多人通过循环 ...

随机推荐

  1. UEditor编辑器 字符数统计和字符数限制 问题

    1.百度UEditor修改右下角统计字数默认只统计前台所见的文字个数,为了便于展示实际保存的时候是保存的包含html标签的,所以右下角的统计字数功能需要修改 getContentLength: fun ...

  2. 阿里云服务器docker搞定镜像

    docker的安装可以看前面的文章 这里我的docker已经安装完成了,该搞镜像了:这里的镜像用的是我以前自己搞的,虽然镜像有点大,但是胜在自己搞的,熟悉(熟悉不熟悉鬼知道) 我的镜像放在了阿里云容器 ...

  3. golang学习之interface与其它类型转换

    如下函数,将interface变量in转换为int: func formatTimeStamp(in interface{}, layout string) (out string) { timeSt ...

  4. Asp.net core如何使用Session

    转自:https://tahirnaushad.com/2017/08/18/asp-net-core-session-state/ Asp.net core使用session: 在nuget 安装M ...

  5. java泛型使用

    泛型的解释 现在感觉泛型是一个值得学习的地方,就抽出时间来学习和总结一下泛型的使用. Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允 ...

  6. HTML DOM status 属性

    <!DOCTYPE html><html> <head>HTML DOM status 属性</head><body><script ...

  7. shiro,基于springboot,基于前后端分离,从登录认证到鉴权,从入门到放弃

    这个demo是基于springboot项目的. 名词介绍: ShiroShiro 主要分为 安全认证 和 接口授权 两个部分,其中的核心组件为 Subject. SecurityManager. Re ...

  8. jvm内置锁synchronized不能被中断

    很久没看技术书籍了,今天看了一下<七周七并发模型>前面两章讲的java,写的还是有深度的.看到了一个有demo,说jvm内置锁synchronized是不能被中断的.照着书上写了个demo ...

  9. svn 未提交的显示黑色的星*

    1.在eclipse中,选择window-->Preferences,里面找到svn,如下图,勾选上Outgoing changes即可

  10. 通过反射感知Redis类里边全部的操作方法

    <?php //通过反射感知Redis类里边全部的操作方法 //根据Redis类实例化一个反射类对象 $me = new ReflectionClass('Redis'); //获得Redis类 ...