.Net Core Excel 导入 之 读取数据并且入库

目录

NuGet包下载EPPlus

接口代码

Md5文件名加密私有方法

导入方法:读取excel数据,并入库

运行效果


今天小编要和大家分享的是 读取Excel表格内的数据,并将数据导入mysql数据库 

我觉得关于Excel的导出和导入是各位码农在工作当中最常见的需求了,所以,,嘿嘿~~~~~~~~~

小编技术有限,不足之处请指出哦,那咱们话不多少,上操作

  • NuGet包下载EPPlus

安装完NuGet 引用如下

using OfficeOpenXml;
  • 接口代码

 /// <summary>
        /// 导入
        /// </summary>
        /// <param name="file"></param>
        /// <returns></returns>
        [HttpPost("exprot1")]
        public async Task<ActionResult<dynamic>> Expotr1(IFormFile file)
        {
            //判断是否选择文件
            if (file == null || file.Length <= 0)
            {
                return new { success = false, msg = "请选择导入文件!", result = "" };
            }
            //判断文件后缀
            string Express = Path.GetExtension(file.FileName);
            if (Express != ".xlsx")
            {
                return BadRequest("请上传文件扩展名格式为'.xlsx'的文件!");
            }
            // 文件名md5
            string filename = Md5FileHash(file.OpenReadStream());
            //文件名+尾缀
            filename += Express;
            //存储目录
            var path = Path.Combine(Directory.GetCurrentDirectory(), "File", "Excel");
            //查看是否存在,不存在创建
            if (!Directory.Exists(path))
            {
                Directory.CreateDirectory(path);
            }
            string filePath = Path.Combine(path, filename);
            FileStream stream = new(filePath, FileMode.OpenOrCreate);
            await file.CopyToAsync(stream);
            stream.Close();
            var res = await ImportAsync(filePath);
            if (res != "成功")
            {
                return BadRequest(res);
            }
            return new { res };
        }

Md5FileHash 是自己封装的方法  用于加密的,如下提供给大家

  • Md5文件名加密私有方法

            /// <summary>
            /// 某文件的md5值
            /// </summary>
            /// <param name="stream">file stream</param>
            /// <returns></returns>
            private string Md5FileHash(Stream stream)
            {
                using var md5 = MD5.Create();
                var data = md5.ComputeHash(stream);
                var sBuilder = new StringBuilder();
                for (var i = 0; i < data.Length; i++)
                {
                    sBuilder.Append(data[i].ToString("x2"));
                }
                return sBuilder.ToString();
            }

    然后还有最后一个私有方法   那就是导入时需要做的数据处理,也可以理解为读取数据  并且入库

  • 导入方法:读取excel数据,并入库

         /// <summary>
        /// 样本导入
        /// </summary>
        /// <param name="filePath"></param>
        /// <returns></returns>
        private async Task<string?> ImportAsync(string filePath)
        {
            //使用EPPlus库创建一个ExcelPackage对象,用于读取或写入Excel文件
            ExcelPackage package = new ExcelPackage(filePath);

            //设置ExcelPackage的许可证上下文为非商业用途
            ExcelPackage.LicenseContext = OfficeOpenXml.LicenseContext.NonCommercial;

            //使用EPPlus库对Excel文件进行读写操作时获取Excel文件中第一个工作表的方法
            //EPPlus是一个.NET库,用于操作Excel文件,提供了许多方便的方法来读写Excel文件
            //Workbook是Excel文件的对象,Worksheets是它的工作表集合,
            //[0]表示获取第一个工作表,因为集合是从0开始索引的。所以,这段代码获取了Excel文件中第一个工作表
            var worksheet = package.Workbook.Worksheets[0];

            //获取 Excel 工作表中所有有数据的行数
            int rowCount = worksheet.Dimension.Rows;
            try
            {
                var data = new List<Target>();
               
                for (int row = 2; row <= rowCount; row++)
                {
                    var target = new Target();
                    target.Id =Guid.Parse(worksheet.Cells[row, 1].Value.ToString());
                    target.Status = Convert.ToInt32(worksheet.Cells[row, 2].Value!);
                    target.CreatedTime =Convert.ToDateTime(worksheet.Cells[row, 3].Value!);
                    target.UpdatedTime= Convert.ToDateTime(worksheet.Cells[row, 4].Value!);
                    target.OtherCancerDrugResponse= worksheet.Cells[row, 5].ToString()!;
                    target.ClinicalEvidenceRaw= worksheet.Cells[row, 6].ToString()!;
                    data.Add(target);
                }
                await _context.Targets.AddRangeAsync(data);
                int n=await _context.SaveChangesAsync();
                System.IO.File.Delete(filePath);
                return "成功";
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
  • 运行效果

OK,Excel数据导入成功,代码重要部分已经写好了注释

希望小编的这篇文章可以帮助到您 

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农小小涛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值