ASP.NET MVC的表格数据导出

开发工具与关键技术:VS/MVC
作者:何桂朋
撰写时间:2019年4月23日

在ASP.NET MVC中,表格数据导出常用的容器是Excel。以学生信息为例。
在导出之前,要先引用NPOI插件备用,

在这里插入图片描述
导入部分的思路是:
(1) 查询出数据并转化成对象列表的格式。
查询出数据,然后用实体类接收注意一下,实体类要包含创建Excel表的表头的字段,
比如:学号(StudentNumber)、姓名(StudentName)、身份证号(StudentIDNum)、性别(StudentSex)、
学院(AcademeName)、专业(SpecialtyName)、班级(ClassName)等等
这是因为要和表的信息一一对应,如果需要筛选的话,可以添加各类ID字段,
作为筛选条件。再转化成对象列表的格式。

//转化为对象列表的格式
List<Student> listExaminee = listStu.ToList();

(2) 使用插件方法HSSFWorkbook创建工作簿;

  HSSFWorkbook excelBook = new HSSFWorkbook();

(3) 使用插件方法ISheet创建工作表并命名;
CreateSheet方法是 在工作簿中添加ISheet,并将其参数作为名称。

//为工作簿创建工作表并命名
 NPOI.SS.UserModel.ISheet sheet1 = excelBook.CreateSheet("考生信息");

(4)书写工作表表头(学号 姓名 身份证号 性别 学院 专业 年级 班级);
CreateRow()方法 是获取工作表的行数。
CreateCell()方法 是获取工作表的行中的列。
SetCellValue() 方法 是给单元格赋值。

//创建第一行
NPOI.SS.UserModel.IRow row1 = sheet1.CreateRow(0);
//创建9列并赋值
row1.CreateCell(0).SetCellValue("学号");
    row1.CreateCell(1).SetCellValue("姓名");
    row1.CreateCell(2).SetCellValue("身份证号");
    row1.CreateCell(3).SetCellValue("性别");
    row1.CreateCell(4).SetCellValue("学院");
    row1.CreateCell(5).SetCellValue("专业");
    row1.CreateCell(6).SetCellValue("年级");
    row1.CreateCell(7).SetCellValue("班级");

(5)linq查询数据list 书写到工作表;

  //创建数据行
  for (int i = 0; i < listStu.Count(); i++){
   //创建行
   NPOI.SS.UserModel.IRow rowTemp = sheet1.CreateRow(i + 1);
   rowTemp.CreateCell(0).SetCellValue(listExaminee[i].StudentNumber);
   rowTemp.CreateCell(1).SetCellValue(listExaminee[i].StudentName);
   rowTemp.CreateCell(2).SetCellValue(listExaminee[i].StudentIDNum);
   rowTemp.CreateCell(3).SetCellValue(listExaminee[i].StudentSex);
   rowTemp.CreateCell(4).SetCellValue(listExaminee[i].AcademeName);
   rowTemp.CreateCell(5).SetCellValue(listExaminee[i].SpecialtyName);
   rowTemp.CreateCell(6).SetCellValue(listExaminee[i].GradeName);
   rowTemp.CreateCell(7).SetCellValue(listExaminee[i].ClassName);
   rowTemp.CreateCell(8).SetCellValue(listExaminee[i].UserNuber);
}

(6)使用IO流写出数据

   //文件名
 var fileName = "考生信息" + DateTime.Now.ToString
("yyyy-MM-dd-HH-mm-ss-ffff")+ ".xls";
   //将Excel表格转化为流,输出
   //创建文件流
   MemoryStream bookStream = new MemoryStream();
  //文件写入流(向流中写入字节序列)
 excelBook.Write(bookStream);
 //输出之前调用Seek(偏移量,游标位置) 把0位置指定为开始位置
  bookStream.Seek(0, SeekOrigin.Begin);
  return File(bookStream, "application/vnd.ms-excel", fileName);

因为时间是唯一的,所以用文件命名使其唯一;工作簿不能直接输出,所以用二进制的流接收
然后用File将其输出。

猜你喜欢

转载自blog.csdn.net/weixin_44550157/article/details/89577472
今日推荐