using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; using NPOI.XSSF.UserModel; using System; using System.Collections.Generic; using System.Data; using System.IO; using System.Linq; using System.Net; using System.Net.Http; using System.Web; using System.Web.Http; using VueWebApi.DLL.BLL; using VueWebApi.Models; using VueWebApi.Tools; namespace VueWebApi.Controllers { [RoutePrefix(prefix: "api/ImportExcel")] [ControllerGroup("Excel导入模板验证", "在线接口")] public class ImportExcelController : ApiController { //定义全局信息返回变量 ToMessage mes = new ToMessage(); #region [Excel导入模板下载] /// /// Excel导入模板下载 /// /// 文件编码 /// [Route(template: "DownLoadExcel")] [HttpGet] public HttpResponseMessage DownLoadExcel(string FileCode = null) { List list = ExcelList.ExcelData(); list = list.Where(s => s.FileCode == FileCode).ToList(); var filename = list[0].FileName + ".xls"; string fileip = System.Configuration.ConfigurationManager.AppSettings["FileIP"]; var msg = fileip + "/Excel/" + filename; mes.code = "200"; mes.data = msg; return TJson.toJson(mes); } #endregion #region [Excel导入文件上传、模板验证、数据量、验证] /// /// Excel导入文件上传、模板验证、数据量、验证 /// /// 文件编码 /// 上传文件 /// [Route(template: "ExcelModelCheck")] [HttpPost] public HttpResponseMessage ExcelModelCheck() { string FileCode = HttpContext.Current.Request["FileCode"].ToString(); HttpPostedFile files = HttpContext.Current.Request.Files[0]; ExcelModelCheck list = new ExcelModelCheck(); Dictionary dList = new Dictionary(); list.json1 = ExcelCheckUpload(files, FileCode); //文件上传 if (list.json1.code == "300") { list.json1 = list.json1; return TJson.toJson(list); } list.json2 = ExcelCheck(files, FileCode); //模板验证 if (list.json2.code == "300") { list.json2 = list.json2; return TJson.toJson(list); } list.json3 = ExcelCheckCount(files, FileCode); //数据量验证 if (list.json3.code == "300") { list.json3 = list.json3; return TJson.toJson(list); } return TJson.toJson(list); } #endregion #region [Excel导入模板上传] /// /// Excel导入模板上传 /// /// 上传文件 /// 文件编码 /// [Route(template: "ExcelCheckUpload")] [HttpGet] [HiddenApi] public ToMessage ExcelCheckUpload(HttpPostedFile files, string FileCode = null) { try { string savePath; string filename = Path.GetFileName(files.FileName); string path = System.Web.HttpContext.Current.Server.MapPath("/InExcel/" + FileCode + "/"); string fileEx = System.IO.Path.GetExtension(filename);//获取上传文件的扩展名 string FileType = ".xls,.xlsx";//定义上传文件的类型字符串 savePath = Path.Combine(path, filename); if (!FileType.Contains(fileEx)) { mes.code = "300"; mes.Message = "文件类型不对,上传失败!"; System.IO.File.Delete(savePath);//执行IO文件删除,需引入命名空间System.IO; return mes; } else if (Directory.Exists(path) == false)//如果不存在就创建file文件夹 { Directory.CreateDirectory(path); //添加文件夹 files.SaveAs(savePath); //将选择的文件保存到指定文件夹下 mes.code = "200"; mes.Message = "文件上传成功!"; } else if (Directory.Exists(savePath) == true) //如果存在重名文件就提示 { System.IO.File.Delete(savePath);//执行IO文件删除,需引入命名空间System.IO; files.SaveAs(savePath); //将选择的文件保存到指定文件夹下 mes.code = "200"; mes.Message = "文件上传成功!"; } else { files.SaveAs(savePath); //将选择的文件保存到指定文件夹下 mes.code = "200"; mes.Message = "文件上传成功!"; } } catch (Exception e) { mes.code = "300"; mes.Message = e.Message; } return mes; } #endregion #region [Excel导入模板验证] /// /// Excel导入模板验证 /// /// 上传文件 /// 文件编码 /// [Route(template: "ExcelCheckUpload")] [HttpGet] [HiddenApi] public ToMessage ExcelCheck(HttpPostedFile files, string FileCode = null) { try { string savePath; string filename = Path.GetFileName(files.FileName); string path = System.Web.HttpContext.Current.Server.MapPath("/InExcel/" + FileCode + "/"); savePath = Path.Combine(path, filename); if (Directory.Exists(path) == false)//如果不存在就创建file文件夹 { Directory.CreateDirectory(path); //添加文件夹 } else { mes = ExcelCheckBLL.ExcelCheck(FileCode, savePath); if (mes.code == "300") //上传模板不是指定模板 { System.IO.File.Delete(savePath);//执行IO文件删除,需引入命名空间System.IO; return mes; } } return mes; } catch (Exception e) { mes.code = "300"; mes.Message = e.Message; } return mes; } #endregion #region[Excel导入模板数据量验证] /// /// Excel导入模板数据量验证 /// /// 上传文件 /// 文件编码 /// [HiddenApi] public ToMessage ExcelCheckCount(HttpPostedFile files, string FileCode = null) { string savePath; string filename = Path.GetFileName(files.FileName); int filesize = files.ContentLength;//获取上传文件的大小单位为字节byte string fileEx = System.IO.Path.GetExtension(filename);//获取上传文件的扩展名 int Maxsize = 10000 * 1024;//定义上传文件的最大空间大小为10M string path = System.Web.HttpContext.Current.Server.MapPath("/InExcel/" + FileCode + "/"); savePath = Path.Combine(path, filename); IWorkbook Workbook; DataTable table = new DataTable(); using (FileStream fileStream = new FileStream(savePath, FileMode.Open, FileAccess.Read)) { //XSSFWorkbook 适用XLSX格式,HSSFWorkbook 适用XLS格式 string fileExt = Path.GetExtension(savePath).ToLower(); if (fileExt == ".xls") { Workbook = new HSSFWorkbook(fileStream); } else if (fileExt == ".xlsx") { Workbook = new XSSFWorkbook(fileStream); } else { Workbook = null; } } //定位在第一个sheet ISheet sheet = Workbook.GetSheetAt(0); //sheet.ShiftRows(sheet.FirstRowNum-1, sheet.LastRowNum,1); //第一行为标题行 IRow headerRow = sheet.GetRow(0); int cellCount = headerRow.LastCellNum; //int rowCount0 = sheet.FirstRowNum; int rowCount = sheet.LastRowNum; if (files == null || files.ContentLength <= 0) { mes.code = "300"; mes.Message = "文件不能为空!"; System.IO.File.Delete(savePath);//执行IO文件删除,需引入命名空间System.IO; return mes; } mes = ImportExcel.ExcelCheckCountSum(savePath); //空数据文件验证 if (mes.code == "300") { mes.code = "300"; mes.Message = "文件不能为空!"; System.IO.File.Delete(savePath);//执行IO文件删除,需引入命名空间System.IO; return mes; } if (filesize >= Maxsize) { mes.code = "300"; mes.Message = "上传文件超过10M,不能上传"; System.IO.File.Delete(savePath);//执行IO文件删除,需引入命名空间System.IO; return mes; } mes.code = "200"; mes.Message = "数据量验证通过"; return mes; } #endregion #region [Excel导入数据验证] /// /// Excel导入数据验证 /// /// 文件编码 /// 文件名称 /// [Route(template: "ExcelCheckData")] [HttpPost] public HttpResponseMessage ExcelCheckData(string FileCode = null, string FileName = null) { string message = ""; string StuCode = ""; int count = 0; List list = new List(); string savePath; string filename = FileName; string path = System.Web.HttpContext.Current.Server.MapPath("/InExcel/" + FileCode + "/"); savePath = Path.Combine(path, filename); list = ExcelCheckBLL.ExcelCheckData(FileCode, savePath, out StuCode, out message, out count); if (list.Count > 0) { System.IO.File.Delete(savePath);//执行IO文件删除,需引入命名空间System.IO; } Dictionary dList = new Dictionary(); dList.Add("code", StuCode); dList.Add("Message", message); dList.Add("Count", count); dList.Add("list", list); return TJson.toJson(dList); } #endregion #region【Excel导入数据】 /// /// Excel导入数据 /// /// 文件编码 /// 文件名称 /// [Route(template: "ExcelImportSubmit")] [HttpPost] public HttpResponseMessage ExcelImportSubmit(string FileCode = null, string FileName = null) { var username = HttpContext.Current.Request.Cookies["admin"].Value.ToString(); //登录用户名 string savePath; string filename = FileName; string path = System.Web.HttpContext.Current.Server.MapPath("/InExcel/" + FileCode + "/"); savePath = Path.Combine(path, filename); mes = ExcelCheckBLL.ExcelImportSubmit(FileCode, savePath, username); return TJson.toJson(mes); } #endregion } }