菜鸟笔记——将视图内表格导出为Excel表格 控制器方法

这个方法就是将查询到的数据填入设置好的Excel表格,在这个方法当中先将数据按条件筛选出来,它的写法与我在4月18号发表的多条件查询差不多,只不过多了一个条件筛选,嗯……确切来说是之前少了一个条件筛选,这个条件筛选的原理很简单,它利用筛选条件和Lambda 表达式将需要的数据从数据库筛选出来,具体见后面的代码。

“Lambda 表达式”(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。Lambda表达式可以表示闭包(注意和数学传统意义上的不同)——引用于百度百科

想要导出Excel表格,就需要创建Excel工作簿,引用NPOI.HSSF.UserModel程序集使用HSSFWerkbook方法创建一个程序Excel工作簿,另外在创建工作簿之前,如果没有添加引用NPOI程序集,就要先添加NPOI程序集(我不确定它究竟是不是程序集)再去引用这个NPOI.HSSF.UserModel程序集。

接下来引用NPOI.HSSF.UserModel程序集利用其中的ISheet方法在工作簿中创建工作表并对这个工作表命名,在这个工作表当中使用IRow方法创建表头行,利用CreateCell方法(这个方法指定了是第几列CreateCell(0)的0是索引值,也是参数,)来设置SetCellValue属性的值在这个表头行设置表头的名称,想要使用这个方法就得引入NPOI.HSSF.UserModel程序集,只是因为之前已经已经引入过了,就没必要再去引入了,同样利用这两个方法for循环为各个表格添加数据。详情见代码

用DateTime.Now.ToString方法给这个文件命名,实例化MemoryStream类将文件转化为内存流,将Excel文件写入内存流,因为文件读取指针会随着内存流数据的写入而不断后移,在输出前需要将文件读取指针移动到指定位置,所以使用Seek方法将指针移动到指定位置,最后以指定的MIME文件类型返回视图,这样就完成了详细信息见代码。

导出

//parameter代表参数
//form代表表格
public ActionResult ExportToExcel(int parameter1,int parameter2,string parameter3)
{
   #region 数据查询&条件筛选
   List<studentVo> listStudent = (这里本来有一个数据查询的代码块(应该是叫代码块吧)但是写上去的话有点水字数的嫌疑就写关键点意思意思一下
   select new studentVo{
      Number = form1. Number, 
      Name = form2.Name,
      gender= form3. gender,
      //筛选条件
      parameter1.2= form1.NumberID,
      parameter2.2= form2. NameID,
    ).ToList();
   以下是条件筛选
   if (parameter1>0)
   {listStudent = listStudent.Where(m => m.parameter1.2== parameter1).ToList();}
   
   if (parameter2>0)
   {listStudent = listStudent.Where(m => m.parameter2.2== parameter2).ToList();

   if (!string.IsNullOrEmpty(parameter3))
   {listStudent = listStudent.Where(m => m.StudentName.Contains(StudentDetail)||m.StudentNumber.Contains(StudentDetail)).ToList();}
   #endregion

   //创建Excel工作簿
   HSSFWorkbook excelBook = new HSSFWorkbook();
   //创建工作表
   NPOI.SS.UserModel.ISheet sheet1 = excelBook.CreateSheet("考生信息");
   //创建表头行
   NPOI.SS.UserModel.IRow row1 = sheet1.CreateRow(0); 
   //设置表头
   row1.CreateCell(0).SetCellValue("编号");
   row1.CreateCell(1).SetCellValue("姓名");
   row1.CreateCell(2).SetCellValue("性别");
   //为Excel表格添加数据
   for (int i=0;i< listStudent.Count();i++) { 
      NPOI.SS.UserModel.IRow rowTemp = sheet1.CreateRow(i+1); //创建行
      //添加数据
      rowTemp.CreateCell(0).SetCellValue(listStudent[i].Number);
      rowTemp.CreateCell(1).SetCellValue(listStudent[i].Name);
      rowTemp.CreateCell(2).SetCellValue(listStudent[i].gender);
   } 
   string fileName = "考生信息" + DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss-ffff") + ".xls"; //为Excel文件命名
   MemoryStream ExcelStream = new MemoryStream();//转化为内存流
   excelBook.Write(ExcelStream); //将Excel文件写入内存流
   //Seek(0,Seek.begin) 第一个参数表示相对位置,第二个参数表示参照位置
   ExcelStream.Seek(0, SeekOrigin.Begin); 
   //MIME文件类型(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型
   return
   File(ExcelStream, "application/vnd.ms-excel", fileName);
}
发布了26 篇原创文章 · 获赞 4 · 访问量 3606

猜你喜欢

转载自blog.csdn.net/weixin_44545673/article/details/90635707