.net core webapi 输入文件流 使用EPPlus导入excel

/// <summary>
///  excel导入
/// </summary>
/// <param name="formCollection">表单集合值</param>
/// <returns>服务器存储的文件信息</returns>
      [HttpPost]
public async Task<IActionResult> UploadFile(IFormFile file)
{
    JsonResult res;
    if (file == null || file.Length == 0)
    {
        return BadRequest("请选择一个文件上传");
    }

    var stream = file.OpenReadStream(); // 获取文件流  
    var workbook = new ExcelPackage(stream); // 创建新的ExcelPackage实例并打开流  
    try
    {
      //  设置许可证上下文为非商业版,如果你使用的是商业版许可证,则设置为 LicenseContext.Commercial
     ExcelPackage.LicenseContext = LicenseContext.NonCommercial;

        var worksheet = workbook.Workbook.Worksheets[0]; // 获取第一个工作表  
        var data = new List<object[]>(); // 存储解析的数据  
        var startRow = 2; // 假设数据从第1行开始(第一行是标题行)  
        var maxRows = worksheet.Dimension.Rows; // 获取总行数  
        var maxCols = worksheet.Dimension.Columns; // 获取总列数  

        for (int row = startRow; row <= maxRows; row++) // 遍历每一行  
        {
            var rowData = new List<object>(); // 存储当前行的数据                   
            BillCode code = new BillCode();
            for (int col = 1; col <= maxCols; col++) // 遍历每一列(从1开始计数)  
            {
            
                bool insertFlag = true;
                var cellValue = worksheet.Cells[row, col].Text; // 获取单元格值  
                if (!string.IsNullOrEmpty(worksheet.Cells[row, 2].Text)&& worksheet.Cells[row, 2].Text!="")
                {                           
                code.billcode = worksheet.Cells[row, 2].Text;
                    //单据编号不能为空
                    if (code.billcode == "") {
                        res = new JsonResult(new
                        {
                            code = -1,
                            message = "单据编号不能为空,请修改后重新导入"                              
                        });
                        return res;
                    }
                code.importDate = worksheet.Cells[row, 1].Text;
                code.type = worksheet.Cells[row, 3].Text;
                code.ProductGroup=worksheet.Cells[row, 4].Text;
                code.ZoneCode=worksheet.Cells[row, 5].Text;
                code.taskStatus = "0";
                code.updateTime=DateTime.Now;
                }
                                                                                                      //   if (cellValue.Contains("日期")) { }
                rowData.Add(cellValue); // 将值添加到当前行数据列表中  
            }
            if (code.billcode != "" && !string.IsNullOrEmpty(code.billcode)) 
            { 
            var UpdateResult = db.Insertable(code).ExecuteCommand();//返回的是
            data.Add(rowData.ToArray()); // 将当前行数据添加到总数据列表中  
            }

        }
         res = new JsonResult(new
        {
            code = 200,
            message = $"success",

        });
        stream.Close(); // 关闭流(实际使用时可能不需要显式调用Close方法)  
        stream.Dispose(); // 释放资源(实际使用时可能不需要显式调用Dispose方法)  
        return res;
        
    }
    catch (Exception ex)
    {
        GlobalVariable.Log.logger.Error($"导入报错:{ex.Message}");
         res = new JsonResult(new
        {
            code = -1,
            message = $"导入报错:{ex.Message},请检查",
          
    });
        return res;

    }            
}
           

本文使用了EPPlus库,先用NuGet包管理器添加EPPlus。然后再写入上述代码,导入excel

导入excel的流程:

1.获取文件流;

2.创建新的ExcelPackage实例并打开流 

3.获取第一个工作表 

4.遍历存储至数据库

前端传入

关于报错:

Please set the ExcelPackage.LicenseContext property. See https://epplussoftware.com/developers/licenseexception

 解决方案:

//  设置许可证上下文为非商业版,如果你使用的是商业版许可证,则设置为 LicenseContext.Commercial
     ExcelPackage.LicenseContext = LicenseContext.NonCommercial;

参考:

文心一言

C#,关于使用EPPlus导入不了Excel表格问题,报错:OfficeOpenXml.LicenseException:“Please set the ExcelPackage.LicenseCon-CSDN博客

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值