.Net Core 项目读取Excel文件数据

740 阅读1分钟

一、先引入Nuget包 (NPOI)

image.png

二、书写读取Excel文件的方法

    public static Object ImportFile(IFormFile file)
    {
        bool result = true ;
        string fileExt = Path.GetExtension(file.FileName).ToLower();
        //定义一个集合一会儿将数据存储进来,全部一次丢到数据库中保存
        MemoryStream ms = new MemoryStream();
        file.CopyTo(ms);
        ms.Seek(0, SeekOrigin.Begin);
        IWorkbook book;
        if (fileExt == ".xlsx")
        {
            book = new XSSFWorkbook(ms);
        }
        else if (fileExt == ".xls")
        {
            book = new HSSFWorkbook(ms);
        }
        else
        {
            return "文件格式错误,请检查后重新上传";
        }
        ISheet sheet = book.GetSheetAt(0);
        int CountRow = sheet.LastRowNum + 1;//获取总行数
        for (int i = 1; i < CountRow; i++)
        {
            //获取第i行的数据
            var row = sheet.GetRow(i);
            //一般第一行都是 文字描述的表头,每一列代表啥
            if (row != null && row.GetCell(0) != null && row.GetCell(0).ToString().Trim().Length > 0)
            {
                //循环的验证单元格中的数据
                for (int j = 0; j < 2; j++) //时间不是必传,所以不用验证判断为空,所以只验证前两列就行
                {
                    if (row.GetCell(j) == null || row.GetCell(j).ToString().Trim().Length == 0)
                    {
                        result &= false;
                    }
                    if (i == 1)
                    {
                        string str = sheet.GetRow(0).GetCell(j).ToString().Trim();
                        bool f = false;
                        switch (j)
                        {
                            case 0:
                                f = str != "学校名称";
                                break;
                            case 1:
                                f = str != "状态";
                                break;
                            case 2:
                                f = str != "有效期-开始(eg.2022-2-2 12:00:00)";
                                break;
                            case 3:
                                f = str != "有效期-结束(eg.2022-2-2 12:00:00)";
                                break;
                            default:
                                break;
                        }
                        if (f) return "文件错误,请使用下载的模板文件进行数据填充上传";
                    }
                }
            }
            else
            {
                CountRow = i;
            }
        }

        if (result)
        {
            List<School> addSchools = new List<School>();  // 需要新增的学校
            for (int i = 1; i < CountRow; i++)
            {
                var row = sheet.GetRow(i);
                School school = new School()
                {
                    Id = Guid.NewGuid().ToString("d"),
                    Name = row.GetCell(0).ToString().Trim(),
                };
                switch (row.GetCell(1).ToString().Trim())
                {
                    case "是":
                        school.Status = 0;
                        break;
                    case "否":
                        school.Status = 1;
                        break;
                }
                if (school.Status == 2)
                {
                    if (!string.IsNullOrEmpty(row.GetCell(2).ToString()))
                    {
                        school.StartTime = Convert.ToDateTime(row.GetCell(2).DateCellValue.ToString().Trim());
                    }
                    if (!string.IsNullOrEmpty(row.GetCell(3).ToString()))
                    {
                        school.EndTime = Convert.ToDateTime(row.GetCell(3).DateCellValue.ToString().Trim());
                    }
                }
                addSchools.Add(school);
            }
            return addSchools;
        }
        else
        {
            return "文件错误!请选择正确的文件进行导入";
        }

    }
    
    //大家可以根据自己的需求 略微修改我代码中的部分逻辑
 
  
    

三、书写接口调用此方法即可

这是我的Excel表数据 image.png

image.png

//可以看到我的数据已经读取出来了