目录
今天小编要和大家分享的是 读取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数据导入成功,代码重要部分已经写好了注释
希望小编的这篇文章可以帮助到您