思路分析:
引用插件NOPI
创建EXCEL对象,并添加相应的工作表、
将需要导入EXCEL表中的数据写入EXCEL对象中,将其放入内存流中,
再转为File的application/vnd.ms-excel格式发到客户端
代码详解:
-
生成数据源
List<Users> lis = new List<Users>() { new Users(){ID=1,Name="小明",ClassName="1509B1",Six=1}, new Users(){ID=2,Name="小羊",ClassName="1509B2",Six=0}, new Users(){ID=3,Name="小鱼",ClassName="1509B3",Six=1}, };
-
创建Excel文件对象
//创建Excel文件对象(工作簿) NPOI.HSSF.UserModel.HSSFWorkbook book = new NPOI.HSSF.UserModel.HSSFWorkbook();
-
创建工作表
//创建一个新的工作表 NPOI.SS.UserModel.ISheet sheet1 = book.CreateSheet("人员信息表");
-
添加工作表的标题(每一个工作表的最上方一行用于写我们数据的标题行)
//添加标题 NPOI.SS.UserModel.IRow row1 = sheet1.CreateRow(0); row1.CreateCell(0).SetCellValue("编号"); row1.CreateCell(1).SetCellValue("姓名"); row1.CreateCell(2).SetCellValue("班级"); row1.CreateCell(3).SetCellValue("性别");
-
填充数据
rows.CreateCell(0).SetCellValue(lis[i].ID); rows.CreateCell(1).SetCellValue(lis[i].Name); rows.CreateCell(2).SetCellValue(lis[i].ClassName); rows.CreateCell(3).SetCellValue(lis[i].Six); }//填充数据 for (int i = 0; i < lis.Count; i++) { //添加标题 NPOI.SS.UserModel.IRow rows = sheet1.CreateRow(i+1);
//在当前行加一,创建新行,有时候会发现导出的数据缺失,有可能就是这里的问题,反正我是在这出的错
-
写入内存流(ms.Seek(起始位置,参考位置))
//写入内存流 System.IO.MemoryStream ms = new MemoryStream(); book.Write(ms); ms.Seek(0, SeekOrigin.Begin);
-
转换为file并返回
return File(ms, "application/vnd.ms-excel", "人员信息表.xls");
-
因为我的开发场景是在MVC中使用,所以方法的返回类型为FileResult,请根据个人开发更改。