.Net Code Excel 文件导入

第一步 下载NuGet NPOI包

    /// <summary>
    /// 将excel文教导入到订单表
    /// </summary>
    /// <param name="file">excel文件</param>
    /// <returns>: -1 ;返回导入文件格式不正确</returns>
    [HttpPost]
    public IActionResult UpdloadOrder(IFormFile file)
    {

        try
        {



            //一、验证文件格式(.xlsx/ .xls)
            string exeFile = Path.GetExtension(file.FileName);  //获取文件名后缀
            if (exeFile != ".xlsx" && exeFile != ".xls")
            {
                return Ok(-1);
            }
            //二、将excel订单信息转为List<订单>
            //(1)将excel文件转为工作(文件->内存流->工作薄)
            IWorkbook wb = null; //工作薄
            using (MemoryStream ms = new MemoryStream())
            {
                file.CopyTo(ms);  //文件·-> 内存流
                ms.Position = 0;

                //xls是2003版Office Microsoft Office Excel 工作表的格式
                //xlsx是2007版Office Microsoft Office Excel 工作表的格式
                if (exeFile == ".xlsx")
                {
                    wb = new XSSFWorkbook(ms);
                }
                else
                {
                    wb = new HSSFWorkbook(ms);
                }


            }
            //(2)获取工作薄的第一页
            ISheet sheet = wb.GetSheetAt(0);

            //(3) 第一页的数据(行 单元格)
            int rowNum = sheet.LastRowNum; //最后一行的行号 行号是从1开始0

            //(4)创建表的集合实例
            List<OrderInfo> orderInfos = new List<OrderInfo>();

            //(5)循环 数据  将每条数据添加到List<订单>
            for (int i = 1; i <= rowNum; i++) 
            {
                OrderInfo curOrder = new OrderInfo();  //实例化表 根据自己要导入的表
                IRow curRow = sheet.GetRow(i); //当前行
                curOrder.ONumber = YitIdHelper.NextId().ToString();  //订单编号 雪花编号
                curOrder.OName = curRow.GetCell(0).StringCellValue;  //字符串
                curOrder.OPhone = curRow.GetCell(1).StringCellValue;
                curOrder.Address = curRow.GetCell(2).StringCellValue;
                curOrder.Freight = (decimal)curRow.GetCell(3).NumericCellValue;//double数字

                curOrder.OrderForm = curRow.GetCell(4).NumericCellValue == 1;  //布尔类型
                curOrder.TotalCount = (int)curRow.GetCell(5).NumericCellValue;  //int 类型
                curOrder.TotalMoney = (decimal)curRow.GetCell(6).NumericCellValue; //double数字
                curOrder.PayType = (PayType)curRow.GetCell(7).NumericCellValue;  //枚举
                curOrder.OrderStatus = (OrderStatus)curRow.GetCell(8).NumericCellValue;//枚举


                orderInfos.Add(curOrder);    //将当前实例对象添加到集合
            }

            //三、将List<订单>写到数据表中


            //后台订单添加集合的方法
            int res = bll.ListToOrder(orderInfos);

            
            return Ok(res);
        }
        catch (Exception exp)
        {

            //写入日志
            logger.LogError("订单表Excel导入错误" + exp.Message);
            throw;
        }

    }

posted on 2024-02-22 20:05  草莓味李子园  阅读(17)  评论(0编辑  收藏  举报

导航