您的位置:首页 > 其它

导出

2019-05-16 08:53 99 查看

开发工具与关键技术:Visual Studio / NOPI数据导出
作者:郑名方
撰写时间:2019年5月9日

导出按钮的第一步:首先要做的是引用NOPI这个插件,要怎样引用这个插件才是正确的,打开本项目右键在文件资源管理器中打开文件夹找到“bin”这个配置文件双击打开把NPOI这个插件复制粘贴进来就可以了吗并没有还要在本项目找到引用右键选择添加引用点击找到浏览找到你原先放NPOI的地方然后选中它就会在项目引用这里看到它,就表示你引用成功。如果做的时候忘记引用这个插件那打多少代码都是无用功,因为不会显示出导出数据的相关功能的。所以说这第一步重要可想而之。
因为只是通过导出按钮就可以显示出导出数据的样式,所以不用构建页面也就是说不用添加视图构建视图,只要写方法就可以,因为导出的数据来源于数据库。我们导出数据只是筛选部分数据然后导出到Excel表格里。筛选数据就是查询数据,先根据条件查询数据它这个查询就像我之前写过的数据查询差不多,可以把先前写过的查询方法复制过来,也可以重新写过,如果是复制过来的要把原来查询的方法名称改了,因为每个方法的名称和ID一样也是唯一的。
要把数据一个一个手动的书写添加到Excel表格里去,然后我们要了解Excel表格,Excel表格除了可以叫Excel表格也可以叫做工作簿。点击Sheet就可以添加Sheet1~很多工作表。构建工作表记得要把表头书写出来,要不然别人不知道01这一条数据它代表的意思是什么。构建好表头接下来就是构建数据。
构建工作簿的思路:
第一步:引用NPOI插件;
第二步:使用插件方法HSSFWorkbook创建工作簿;这一步相当于在桌面添加了Excel工作簿一样。
第三步:使用插件方法ISheet创建工作表并命名; 这一步相当于Sheet创建一个工作表。
第四步:书写工作表表头;
第五步:Linq查询数据List书写到工作表;
第六步:使用IO流写出数据。
下面的代码来源是老师上课。

public ActionResult ExportToExcel(int AcademeID, int GradeID, int ClassID, string StudentInfo)
{
var listStu = from tbStudent in myModels.PW_Student//学生表
join tbAcademe in myModels.SYS_Academe on tbStudent.AcademeID equals tbAcademe.AcademeID//学院表
join tbSpcialty in myModels.SYS_Specialty on tbStudent.SpecialtyID equals tbSpcialty.SpecialtyID//专业表
join tbGrade in myModels.SYS_Grade on tbStudent.GradeID equals tbGrade.GradeID//年级表
join tbClass in myModels.SYS_Class on tbStudent.ClassID equals tbClass.ClassID//班级表
join tbUser in myModels.PW_User on tbStudent.UserID equals tbUser.UserID//用户表
orderby tbStudent.studentID descending
select new Student//构建的实体类
{
studentID = tbStudent.studentID,//学生ID
UserID = tbStudent.UserID,//用户ID
StudentNumber = tbStudent.StudentNumber,//学号
StudentName = tbStudent.StudentName,//姓名
StudentIDNum = tbStudent.StudentIDNum,//身份证号
StudentSex = tbStudent.StudentSex,//性别
AcademeName = tbAcademe.AcademeName,//学院
SpecialtyName = tbSpcialty.SpecialtyName,//专业
GradeName = tbGrade.GradeName,//年级
ClassName = tbClass.ClassName,//班级
UserNuber = tbUser.UserNuber,//账号
AcademeID = tbStudent.AcademeID,//学院ID
SpecialtyID = tbStudent.SpecialtyID,//专业ID
GradeID = tbStudent.GradeID,//年级ID
ClassID = tbStudent.ClassID//班级ID
};
if (AcademeID > 0)
{
//筛选学院数据
listStu = listStu.Where(m => m.AcademeID == AcademeID);
}
if (GradeID > 0)
{
listStu = listStu.Where(m => m.GradeID == GradeID);
}
if (ClassID > 0)
{
listStu = listStu.Where(m => m.ClassID == ClassID);
}
if (!string.IsNullOrEmpty(StudentInfo))
{
listStu = listStu.Where(m => m.StudentNumber.Contains(StudentInfo) || m.StudentName.Contains(StudentInfo));
}

//将查询出来的数据转化为对象列表的格式
List<Student> listExaminee = listStu.ToList();
//创建工作簿Excel
HSSFWorkbook excelBook = new HSSFWorkbook();
//创建工作
//为工作簿创建工作表并命名
NPOI.SS.UserModel.ISheet sheet1 = excelBook.CreateSheet("考生信息");
//编写工作表
//(1)表头
//创建标题行并设置字段
//创建第一行
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("班级");
row1.CreateCell(8).SetCellValue("账号");

//(2)数据:listStu
//创建数据行
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);

}
//文件名
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);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: