.net core 使用NPOI导入Excel中的数据
1、项目的依赖项中添加NPOI的包
2、在需要使用的地方引用NPOI,接收前端上传的文件数据:
using NPOI.XSSF.UserModel; // XSSF用于创建office2007及以后使用的格式,HSSF则是这之前的格式 using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; using System.IO; // 方法体 // 判定是否有文件传到后端 if (Request.Form.Files.Count>0) { // 获取对应文件 var file = Request.Form.Files[0]; // 导入到这个地址 string path = "d:\\数据接收"; // 如果文件地址不存在,创建一个 if (!Directory.Exists(path)) { Directory.CreateDirectory(path); } // 用文件流上传到指定位置 string fileName = Path.Combine(path, file.FileName); using(FileStream fs=new FileStream(fileName, FileMode.Create)) { file.CopyTo(fs); } // 读取文件并获得详细数据,代码例在下方 } else { return GetErr<string>("导入失败!"); }
3、读取刚才导入的文件并获取详细数据传给数据库:
//获取指定地址的文件 using (FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite)) { // 定义一个用于存储excel表数据的集合 // 以下模拟存储的数据集合对应实体类为T,属性有Name、Age和CreateTime List<T> data = new List<T>(); // 创建工作簿 IWorkbook workbook = null; try { // .xlsx格式:XSSFWorkBook if (fileName.IndexOf(".xlsx", StringComparison.Ordinal) > 0) { workbook = new XSSFWorkbook(fs); } // .xls格式:HSSFWorkBook else if (fileName.IndexOf(".xls", StringComparison.Ordinal) > 0) { workbook = new HSSFWorkbook(fs); } // workbook不为空(文件格式正确)才继续执行 if (workbook != null) { // 读取第一个sheet(表) ISheet sheet = workbook.GetSheetAt(0); int rowCount = sheet.LastRowNum;// 获取最后一行的索引值(总行数) // 确定表中一定有数据再继续执行 if (rowCount > 0) { // 循环填入数据 // FirstRowNum 第一个逻辑行 for (int a = sheet.FirstRowNum; a <= rowCount; a++) { IRow row = sheet.GetRow(a); T model = new T() { Name = row.GetCell(0)?.ToString(), Age = row.GetCell(1)?.ToString(), CreateTime = DateTime.Now }; data.Add(model); } // 与数据库交互 var conn = BLL.ImportExcel(data); // 将结果正确返回给前端 return Json(new Response(){ code=0, msg="导入成功!" }); } else { // 将结果正确返回给前端 return Json(new Response(){ code=-1, msg="表中没有数据" }); } } else { // 将结果正确返回给前端 return Json(new Response(){ code=0, msg="导入文件格式有误" }); } } catch (Exception ex) { throw new Exception(ex.Message); } }
至此导入完成。

浙公网安备 33010602011771号