1. 安装nuget包

NPOI

我们开发的就是NPOI导入导出

1.1首先我们的开发框架是blog.core(老张的哲学)

Blog.Core (neters.club)官网

1.2我们需要使用Dto和实体进行传输数据

Dto和实体转换

  • 我们的业务逻辑在APi控制器里实现

依赖注入我们需要的接口,到开发中我们需要里面的方法。

首先我们开始导入数据(代入数据是把Excel里面数据导入到数据库这样的一个效果 我们到公司里面会遇到这种情况)

标注 111111111111111111

[HttpPost(“ImportFile”)]

//IFromFile 表示上传文件接口

publicasyncTask ImportFile(IFormFile file)

{

//实例化/创建一个控制 List 来存放Excel

List users=newList();

1.

#region第一部分上传文件

//接着,使用HttpContext.Request.Form.Files获取上传的文件

//并将其保存到服务器的/wwwroot目录下。

file = HttpContext.Request.Form.Files[0]; // 获取上传的第一个文件,因为该控制器方法只支持上传单个文件。

// 保存到这 file.FileName 表示上传的文件的文件名。

varpath = “wwwroot/”+ file.FileName;

#上述就是拿到文件 放到wwwroot里面

//使用FileStream类的构造函数创建一个新的FileStream对象,

//并将指定路径的文件以”打开或创建”的模式打开(FileMode.OpenOrCreate)。

FileStream 类通常用于创建、打开和读取文件。

///using 语句定义了一个作用域,在作用域结束时会自动释放 FileStream 所占用的资源。这是一种编写可靠代码的好习惯,可以确保不会意外地在应用程序中保留文件句柄。

保存到磁盘上的指定路径

using(FileStream fs=newFileStream(path,FileMode.OpenOrCreate))

{

file.CopyTo(fs); //把拿到的数据CopyTo到file中(file上传文件)

}

#endregion

#region第二部分 获取文件内容

//然后,打开文件并使用NPOI库读取文件内容,将每行数据转化为SeckillGoodMessageDto对象,并将其添加到users列表中。

//首先,使用File.Open方法打开指定路径的Excel文件,获取一个文件流(stream2)对象。

varstream2 = System.IO.File.Open(path, FileMode.Open);

//接着,使用NPOI库中的XSSFWorkbook类构造一个Excel工作簿对象(book),并将刚刚打开的文件流对象作为参数传入。这个XSSFWorkbook类是NPOI库中专门用于处理.xlsx格式的Excel文件的类。

varbook =newNPOI.XSSF.UserModel.XSSFWorkbook(stream2);

// HSSFWorkbook workbook = new HSSFWorkbook(file);

//使用book对象的GetSheetAt(0)方法,获取Excel工作簿的第一个工作表,并将其赋值给sheet变量。

varsheet = book.GetSheetAt(0);

//接下来,使用sheet对象的LastRowNum属性获取工作表中数据行的最大行数,并将其赋值给rows变量。在这个Excel文件中,第一行是标题行,所以我们从第二行开始遍历。

introws = sheet.LastRowNum;

for(inti = 1; i <= rows; i++)

{

//使用sheet对象的GetRow()方法,获取当前行的行对象,并将其赋值给row变量。

varrow = sheet.GetRow(i);

//创建一个SeckillGoodMessageDto类型的DTO对象userss,并将该行的第一列和第二列单元格的值分别赋值给DTO对象的Title和ShopPhoto属性。

SeckillGoodMessageDto userss = newSeckillGoodMessageDto();

/* userss.Title = row.GetCell(0).StringCellValue;

userss.ShopPhoto = row.GetCell(1).StringCellValue;

userss.ShopId = row.GetCell(2).ObjToInt();*/

//ShopId

userss.ShopId = row.GetCell(0).ObjToInt();

//Spuid

userss.Spuid = row.GetCell(1).ObjToInt();

//Skuid

userss.Skuid = row.GetCell(2).ObjToInt();

/* userss.Title = row.GetCell(3).StringCellValue;

userss.ShopPhoto = row.GetCell(4).StringCellValue;

*//* userss.Price = row.GetCell(5).ObjToDecimal(); //他俩是decimal

userss.CostPrice = row.GetCell(6).ObjToDecimal();*//*

userss.CreateTime = row.GetCell(5).StringCellValue;

userss.CheckTime = row.GetCell(6).StringCellValue;

userss.Status = row.GetCell(7).ObjToInt();

userss.StartTime = row.GetCell(8).StringCellValue;

userss.Endime = row.GetCell(9).StringCellValue;

userss.Num = row.GetCell(10).ObjToInt();

userss.Stock = row.GetCell(11).ObjToInt();

userss.Describes = row.GetCell(12).StringCellValue;*/

//最后,将DTO对象添加到列表变量users中。

users.Add(userss);

}

#endregion

#region第三部分 将数据添加到数据库

//最后,使用_seckillGoodMessageServices服务将users列表中的数据添加到数据库中,并返回结果。

varresult =await_seckillGoodMessageServices.Adds(users);

//成功

if(result!=null)

{

returnnewMessageModel()

{

status = 200,

success = true,

msg=“成功”,

};

}

//否则失败

else

{

returnnewMessageModel()

{

status = 500,

success = false,

msg=“失败”,

};

}

#endregion

}

下面开始我们的导出(导出是和导入相反的把数据库数据导出到Excel中)

标注:111111111111111

[HttpGet(“ExportFile”)]

//导出文件

publicasyncTask ExportFile()

{//(把数据库数据导出到Excel中)

//获取数据库数据

varlist = await_seckillGoodMessageServices.Query();

stringfilePath = “”;

//获取文件路径和名称

varwwwroot = _host.WebRootPath;

varfilename = “用户表.xlsx”;

filePath = Path.Combine(wwwroot, filename);

//创建一个工作簿和工作表

NPOI.XSSF.UserModel.XSSFWorkbook book = new NPOI.XSSF.UserModel.XSSFWorkbook();

varsheet = book.CreateSheet();

//创建表头行

varheaderRow = sheet.CreateRow(0);

headerRow.CreateCell(0).SetCellValue(“Title”);

headerRow.CreateCell(1).SetCellValue(“ShopPhoto”);

//创建数据行

vardata = list.ToList();

for(inti = 0; i < data.Count(); i++)

{

vardataRow = sheet.CreateRow(i + 1);

dataRow.CreateCell(0).SetCellValue(data[i].Title);

dataRow.CreateCell(1).SetCellValue(data[i].ShopPhoto);

}

//将Execel 文件写入磁盘

using(varf = System.IO.File.OpenWrite(filePath))

{

book.Write(f);

}

//将Excel 文件作为下载返回给客户端

varbytes = System.IO.File.ReadAllBytes(filePath);

returnFile(bytes, “application/octet-stream”, $”{System.DateTime.Now.ToString(“yyyyMMdd”)}.xlsx”);

}