/// <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;
参考:
文心一言