MVC下使用NPOI的Execl导入操作

第一步

首先导入NPOI引入文件(右键项目->管理NUget包,即可引入)

第二步

前台代码

前台ajax代码

  yes: function (index) {    //点击确定回调事件
                        if (document.getElementById("fileDatass").value == null || document.getElementById("fileDatass").value == "") {
                            alert("请选择上传文件");
                            return;
                        } else {
                            var f_content = document.getElementById("fileData").value;//获取上传文件数据 //fileData是file标签id
                            var fileext = f_content.substring(f_content.lastIndexOf("."), f_content.length) //截取.后面文件类型
                            fileext = fileext.toLowerCase()
                            if (fileext != '.xls') { 
                                alert("对不起,导入数据格式必须是xls格式文件哦,请您调整格式后重新上传,谢谢 !");
                                o.file.focus();
                                return;
                            } else {
                               //获取表单数据
                                var formData = new FormData($("#file-form")[0]) //根据表单ID获取表单数据
                                $.ajax({
                                    type: "post", //必须post
                                    url: "ImportExcel", //控制器方法名
                                    data: formData,
                                    processData: false,
                                    contentType: false,
                                    success: function (data) {
                                        if (data == "导入失败、内容已有") {
                                            layer.msg("导入失败!专业名已有", { icon: 5 });
                                        } else if (data == "请选择有效的Execl文件") {
                                            layer.msg("请选择有效的Execl文件", { icon: 5 });
                                        } else if (data == "导入成功") {
                                            layer.msg("导入成功", { icon: 6 });
                                            //layui执行重载
                                            table.reload('demo', {
                                                page: {
                                                    curr: usertable.curr //重新从记录 页开始
                                                }
                                            });
                                            layer.close(index)//layui关闭弹出框
                                        } else if (data == "导入失败") {
                                            layer.msg("导入失败", { icon: 5 });
                                        } else {
                                            layer.msg("导入失败Execl文件,请联系开发人员", { icon: 5 });
                                        }

                                    }
                                });

                            }
                        }
                    }

  第三步

控制器方法

  1         /// <summary>
  2         /// Excel导入成Datable
  3         /// </summary>
  4         /// <param name="file">导入路径(包含文件名与扩展名)</param>
  5         /// <returns></returns>
  6         public ActionResult ImportExcel(HttpPostedFile fileData)
  7         {
  8           
  9             
 10             string iszq = "导入失败、内容已有";
 11             try
 12             {
 13                 HttpPostedFileBase file = Request.Files["fileData"];
 14                 if (file == null)
 15                 {
 16                     iszq = "请选择有效的Execl文件";
 17                     return Content(iszq, "text/plain"); 
 18                 }
 19                 //存入文件
 20                 if (file.ContentLength > 0)
 21                 {
 22                     //先存入在本地
 23                     file.SaveAs(Server.MapPath("~/UpFiles/DoxlFiles/") + System.IO.Path.GetFileName(file.FileName));
 24                 }
 25 
 26                 string a = Server.MapPath("~/UpFiles/DoxlFiles/" + file.FileName);
 27 
 28                 var datatable = ImportExcelFile(a);
 29 
 30                 
 31                 for (int i = 0; i < datatable.Rows.Count; i++)
 32                 {
 33                     if (!string.IsNullOrEmpty(datatable.Rows[i][0].ToString()))
 34                     {
 35                         //专业名查询数据库有没有重复
 36                       string subname  = datatable.Rows[i][0].ToString();
 37                         
 38                         //如果数据库已有当前列的专业名,就跳出循环,进行下一次循环
 39                             if (entity.subject.Where(p => p.subject_name == subname).Count() > 0)
 40                             {
 41                             continue;
 42                             }
 43                         
 44                         subject su = new subject();
 45                         //插入数据[0]是第一列
 46                         su.subject_name = datatable.Rows[i][0].ToString();
 47                         entity.subject.Add(su);
 48                         if (entity.SaveChanges() > 0)
 49                         {
 50                             iszq = "导入成功";
 51                         }
 52                         else
 53                         {
 54 
 55                             iszq = "导入失败";
 56                             break;
 57                         }
 58 
 59 
 60                     }
 61                 }
 62               
 63                 return Content(iszq, "text/plain");
 64             }
 65             catch (Exception)
 66             {
 67 
 68                 throw;
 69             }
 70         }
 71         /// <summary>
 72         /// Excel导入帮助类
 73         /// </summary>
 74         /// <param name="filePath"></param>
 75         /// <returns></returns>
 76         public DataTable ImportExcelFile(string filePath)
 77         {
 78             HSSFWorkbook hssfworkbook;
 79             #region//初始化信息
 80             try
 81             {
 82                 using (FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read))
 83                 {
 84                     hssfworkbook = new HSSFWorkbook(file);
 85                 }
 86             }
 87             catch (Exception e)
 88             {
 89                 throw e;
 90             }
 91             #endregion
 92 
 93             NPOI.SS.UserModel.ISheet sheet = hssfworkbook.GetSheetAt(0);
 94             DataTable table = new DataTable();
 95             IRow headerRow = sheet.GetRow(0);//第一行为标题行
 96             int cellCount = headerRow.LastCellNum;//LastCellNum = PhysicalNumberOfCells
 97             int rowCount = sheet.LastRowNum;//LastRowNum = PhysicalNumberOfRows - 1
 98 
 99             //handling header.
100             for (int i = headerRow.FirstCellNum; i < cellCount; i++)
101             {
102                 DataColumn column = new DataColumn(headerRow.GetCell(i).StringCellValue);
103                 table.Columns.Add(column);
104             }
105             for (int i = (sheet.FirstRowNum + 1); i <= rowCount; i++)
106             {
107                 IRow row = sheet.GetRow(i);
108                 DataRow dataRow = table.NewRow();
109 
110                 if (row != null)
111                 {
112                     for (int j = row.FirstCellNum; j < cellCount; j++)
113                     {
114                         if (row.GetCell(j) != null)
115                             dataRow[j] = (row.GetCell(j)).ToString();
116                     }
117                 }
118 
119                 table.Rows.Add(dataRow);
120             }
121             return table;
122 
123 
124         }
原文地址:https://www.cnblogs.com/wangshaod/p/10542229.html