cshtml:
1 <form class="form-horizontal" id="form1" role="form" ng-submit="import ()" enctype="multipart/form-data"> 2 <button class="btn btn-primary" type="button" ng-click="downloadTemp()">下载模板</button> 3 <button type="submit" class="btn btn-primary">导入</button> 4 </form>
js:
1 //下载模板 2 $scope.downloadTemp = function () { 3 downloadfile({ 4 url: "/Temp/DownloadTemp" 5 }); 6 } 7 8 9 10 //导入 11 $scope.import = function () { 12 var url = "/Temp/Import"; 13 var formData = new FormData();//使用FormData进行文件上传 14 formData.append("file", file.files[0]);//拿到当前文件 15 $http.post(url, formData, { 16 transformRequest: angular.identity, 17 headers: { 'Content-Type': undefined } 18 }).success(function (data, status) { 19 var success = ""; 20 if (data.success = false) 21 { 22 success = "导入失败!"; 23 } 24 $scope.AlertMesage(success + data.Message, 1); 25 }).error(function (data, status) { 26 $scope.AlertMesage("导入异常:[" + data.Message + "]!", 3); 27 }); 28 };
Controller:
1 /// <summary> 2 /// 模板下载 3 /// </summary> 4 /// <returns></returns> 5 [HttpPost] 6 public FileResult DownloadTemp() 7 { 8 try 9 { 10 var fileName = $"数据_{DateTime.Now:yyyyMMdd}.xls"; 11 //创建Excel文件的对象 12 HSSFWorkbook book = new HSSFWorkbook(); 13 //添加一个sheet 14 ISheet sheet1 = book.CreateSheet("Sheet1"); 15 #region 给sheet1添加第一行的头部标题 16 IRow row1 = sheet1.CreateRow(0); 17 //给sheet1添加第一行的头部标题 18 row1.CreateCell(0).SetCellValue("编号"); 19 row1.CreateCell(1).SetCellValue("名称"); 20 row1.CreateCell(2).SetCellValue("运能"); 21 #endregion 22 //获取正常状态(自营,在用,有效)的站点运能数据 23 var list = GetAllListInfo(); 24 if (list != null && list .Any()) 25 { 26 for (int i = 0; i < list.Count(); i++) 27 { 28 NPOI.SS.UserModel.IRow rowtemp = sheet1.CreateRow(i + 1); 29 rowtemp.CreateCell(0).SetCellValue(capacityList[i].Code); 30 rowtemp.CreateCell(1).SetCellValue(capacityList[i].Name); 31 rowtemp.CreateCell(2).SetCellValue(capacityList[i].Capacity); 32 33 } 34 } 35 // 写入到客户端 36 MemoryStream ms = new MemoryStream(); 37 book.Write(ms); 38 ms.Seek(0, SeekOrigin.Begin); 39 return File(ms, "application/vnd.ms-excel", fileName); 40 } 41 catch (Exception ex) 42 { 43 throw new Exception("导出数据失败:" + ex.ToString()); 44 } 45 }
1 /// <summary> 2 /// 导入 3 /// </summary> 4 /// <returns></returns> 5 [HttpPost] 6 public JsonResult Import() 7 { 8 try 9 { 10 //接收客户端传递过来的数据 11 HttpPostedFileBase file = Request.Files["file"]; 12 if (file == null) 13 { 14 return Json(new 15 { 16 Success = false, 17 Message = "请选择上传的Excel文件", 18 }); 19 } 20 //对文件的格式判断,此处省略 21 string fileExt = Path.GetExtension(file.FileName.Replace(""", "")); 22 var supportArr = new string[] { ".xls", ".xlsx" }; 23 if (supportArr.Contains(fileExt) == false) 24 { 25 //throw new ArgumentException(string.Format("不支持的文件类型:{0}", fileExt)); 26 return Json(new 27 { 28 Success = false, 29 Message = string.Format("不支持的文件类型:{0}", fileExt), 30 }); 31 } 32 33 Stream inputStream = file.InputStream; 34 //HSSFWorkbook hssfworkbook = new HSSFWorkbook(inputStream); 35 IWorkbook workbook = null; 36 if (fileExt == ".xlsx") 37 { 38 workbook = new XSSFWorkbook(inputStream); // .xlsx 39 } 40 else 41 { 42 workbook = new HSSFWorkbook(inputStream); // .xls 43 } 44 NPOI.SS.UserModel.ISheet sheet = workbook.GetSheetAt(0); 45 // IRow headerRow = sheet.GetRow(0);//第一行为标题行 46 // int cellCount = headerRow.LastCellNum;//LastCellNum = PhysicalNumberOfCells 47 int rowCount = sheet.LastRowNum;//LastRowNum = PhysicalNumberOfRows - 1 48 List<StationEntity> list = new List<StationEntity>(); 49 if (rowCount > 0) 50 { 51 try 52 { 53 54 for (int i = (sheet.FirstRowNum + 1); i <= rowCount; i++) 55 { 56 IRow row = sheet.GetRow(i); 57 StationEntity model = new StationEntity(); 58 59 if (row != null) 60 { 61 62 model.Code = row.GetCell(0) != null ? GetCellValue(row.GetCell(0)) : string.Empty ; 63 model.Name = row.GetCell(1) != null ? GetCellValue(row.GetCell(1)) : string.Empty; 64 model.Capacity = row.GetCell(2) != null ? ConvertHelper.ToInt32(GetCellValue(row.GetCell(2))) : 0; 65 list.Add(model); 66 } 67 } 68 } 69 catch (Exception) 70 { 71 return Json(new 72 { 73 Success = false, 74 Message = "请填写正确格式的数据", 75 }); 76 } 77 } 78 79 //导入运能数据 80 if (list != null && list.Any()) 81 { 82 string msg = string.Empty; 83 var success = StationBLL.RefreshData(list,out msg); 84 return Json(new 85 { 86 Success = success, 87 Message = msg, 88 }); 89 } 90 else 91 return Json(new 92 { 93 Success = false, 94 Message = "没有要导入的数据", 95 }); 96 } 97 catch (Exception ex) 98 { 99 throw new Exception("导入数据失败:" + ex.ToString()); 100 } 101 }
1 /// 根据Excel列类型获取列的值 2 /// </summary> 3 /// <param name="cell">Excel列</param> 4 /// <returns></returns> 5 private static string GetCellValue(ICell cell) 6 { 7 if (cell == null) 8 return string.Empty; 9 switch (cell.CellType) 10 { 11 case CellType.Blank: 12 return string.Empty; 13 case CellType.Boolean: 14 return cell.BooleanCellValue.ToString(); 15 case CellType.Error: 16 return cell.ErrorCellValue.ToString(); 17 case CellType.Numeric: 18 case CellType.Unknown: 19 default: 20 return cell.ToString(); 21 case CellType.String: 22 return cell.StringCellValue; 23 case CellType.Formula: 24 try 25 { 26 HSSFFormulaEvaluator e = new HSSFFormulaEvaluator(cell.Sheet.Workbook); 27 e.EvaluateInCell(cell); 28 return cell.ToString(); 29 } 30 catch 31 { 32 return cell.NumericCellValue.ToString(); 33 } 34 } 35 }