NPOI导出

                        NPOI导出

导出的方法有很多种,下面介绍的是NPOI导出。若是想使用NPOI导出,就必须借用NPOI插件
在这里插入图片描述

这个插件和普通的插件不一样,因为这是配置插件。所以放在bin文件里面。它的作用就是把项目跟Microsoft Excel工作表连接。我们要通过代码来创造在Excel表格中的行和列。代码大概的流程:1.将要查询的数据查询出来。2. 将查询出来的数据转化为对象列表的格式。3. 创建工作簿、创建工作、编写工作表。4. 为工作簿创建工作表并命名。5. 表头、创建标题行并设置字段、创建第一行。
在这里插入图片描述
6. 创建列、创建行并赋值。7.文件命名。8. 将Excel表格转化为流,输出。创建文件流。9. 文件写入流(向流中写入字节序列)。10. 输出之前调用Seek(偏移量,游标位置) 把0位置指定为开始位置。

下面是第一步开始的代码:

  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//班级表
      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();

        //创建工作簿、创建工作、编写工作表


        HSSFWorkbook excelBook = new HSSFWorkbook();

        //为工作簿创建工作表并命名

        NPOI.SS.UserModel.ISheet sheet1 =excelBook.CreateSheet("考生信息");

        //表头、创建标题行并设置字段、创建第一行

        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("账号");

        //表格的数据  ;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);           
        }

        //文件名

        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);

    }

而在视图里,一直都是使用键值的形式来匹配:

 where: {

                AcademeID: AcademeID,

                GradeID: GradeID,

                ClassID: ClassID,

                StudentInfo: StudentInfo,

            }

就不能用键值的形式。要自行进行拼接:

 var strSeachWhere = "";

 for (var key in tabStudent.config.where) {

    strSeachWhere += '&' + key + '=' + tabStudent.config.where[key];

//转化为字符串

 var strTemp = '&AcademeID=' + AcademeID + '&GradeID=' + GradeID + '&ClassID=' + ClassID + '&StudentInfo=' + StudentInfo;

//拿查询的条件跟导出的条件进行比较(必须相等) //获取当前导出的条件

        var AcademeID = $("#searchAcademeID").val();

        if (AcademeID == "" || AcademeID == undefined) {

            AcademeID = 0;

        }

        var GradeID = $("#searchGradeID").val();

        if (GradeID == "" || GradeID == undefined) {

            GradeID = 0;

        }

        var ClassID = $("#searchClassID").val();

        if (ClassID == "" || ClassID == undefined) {

            ClassID = 0;

        }

        var StudentInfo = $("#searchStudentNumber").val();

        if (StudentInfo == undefined) {

各个条件都符合后,然后进行提交:

        if (strSeachWhere == strTemp) {

  layer.confirm('您确定要导出' +tabStudent.config.page.count + '条学生信息?',

                { icon: 3, titile: "提示" }, function (index) {

                    layer.close(index);//关闭提示框

                    //新标签页打开下载excel的url,下载excel文件
window.open('/ExaminationManagement/SetExaminee/ExportToExcel?' +
strTemp.substring(1, strTemp.length));
                });
                          }

        else {

            layer.msg("请查询出要导出的数据!", { icon: 0, skin: "layui-layer-molv" });

        }

    }

提交成功的话,将会成功导出所查询出来的数据:
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值