这个方法就是将查询到的数据填入设置好的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);
}