- 安装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”);
}