Excel表格导出

开发工具与关键技术:MVC
作者:文泽钦
撰写时间:2019年5月25日

员工数据导出到excel表格,导出前要对数据处理,因为一个项目可以导出的数据比较多,在导出前可以先对数据的查询筛选,把需要的数据导出,这样减少了不必要的数据出现。

	//导出数据到Excel表格
    function ExportToExcel()
    {
        //获取当前表格数据的筛选条件
        //获取部门id
        var DepartmentID = $("#searchDepartmentID").val();
        
        //获取职位id
        var PositionID = $("#searchPositionID").val();
        
        //获取员工姓名
        var EmployeeDetail = $("#searchEmployeeName").val();
        
        //判断
        //部门id为空或者为undefined
        if (DepartmentID == "" || DepartmentID == undefined)
         {
            //则职位id等于零
            DepartmentID = 0;
        }
        if (PositionID == "" || PositionID == undefined) 
        {
            PositionID = 0;
        }
        if (EmployeeDetail == undefined) 
        {
            EmployeeDetail = "";
        }
        layer.confirm("是否要导出当前表格中的数据,是请点击确定按钮,否则请筛选需要导出的数据!", { icon: 3, title: "提示" }, function (layerIndex) {
            layer.close(layerIndex);
            window.open("ExportToExcel?DepartmentID=" + DepartmentID + "&PositionID=" + PositionID + "&EmployeeDetail=" + EmployeeDetail);
        });
    }

导出数据,直接导出是没有数据的。接收页面传过来的id,把要导出的数据查询出来。

	public ActionResult ExportToExcel(int DepartmentID, int PositionID, string EmployeeDetail) 
	{
     //查询员工表,职位表,部门表,用户表
     List<employeeVo> listEmployee = (from tbEmployee in myModels.PW_Employee
      													join tbDepartment in myModels.SYS_Department on tbEmployee.DepartmentID 
      																					equals tbDepartment.DepartmentID
      																					
										          		join tbPosition in myModels.SYS_Position on tbEmployee.PositionID 
										          										equals tbPosition.PositionID
										          										
      													join tbUser in myModels.PW_User on tbEmployee.UserID 
      																						equals tbUser.UserID
      																						
                                       					orderby tbEmployee.EmployeeID descending
         select new employeeVo
         				{
         					  //员工id
                              EmployeeID = tbEmployee.EmployeeID,
                              //用户id
                              UserID = tbUser.UserID,
                              //员工编号
                              EmployeeNumber = tbEmployee.EmployeeNumber,
                              //员工姓名
                              EmployeeName = tbEmployee.EmployeeName,
                              //电话
                              Phone = tbEmployee.Phone,
                              //手机
                              Cellphone = tbEmployee.Cellphone,
                              //地址
                              Address = tbEmployee.Address,
                              //这里查的不是部门id,而是部门名称
                              DeoartmentName = tbDepartment.DeoartmentName,
                              //职位名称
                              PositionName = tbPosition.PositionName,
                              //备注
                              Remark = tbEmployee.Remark,
                              //筛选条件:根据部门id,职位id筛选
                              DepartmentID = tbDepartment.DepartmentID,
                              PositionID = tbPosition.PositionID
                                       }).ToList();

			 //条件筛选 Lambda表达式 运算符=>,左边是参数(如果有),右边是表达式或者语句
			 //x=>x*x
			 if (DepartmentID > 0)
 				 {
 				 //部门id
 			     listEmployee = listEmployee.Where(m => m.DepartmentID == DepartmentID).ToList();
      }
      
   			   if (PositionID > 0)
   				 {
   				 //职位id
    listEmployee = listEmployee.Where(m => m.PositionID == PositionID).ToList();
        }
    if (!string.IsNullOrEmpty(EmployeeDetail))
    {
    //根据员工姓名员工编号查询
    listEmployee = listEmployee.Where(m => m.EmployeeName.Contains(EmployeeDetail) || m.EmployeeNumber.Contains(EmployeeDetail)).ToList();
        }
        
        //创建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("电话");
        row1.CreateCell(3).SetCellValue("手机");
        row1.CreateCell(4).SetCellValue("地址");
        row1.CreateCell(5).SetCellValue("部门");
        row1.CreateCell(6).SetCellValue("职位");
        row1.CreateCell(7).SetCellValue("备注");
        
        //为Excel表格添加数据
        for (int i = 0; i < listEmployee.Count(); i++)
        {
            //创建行
            NPOI.SS.UserModel.IRow rowTemp = sheet1.CreateRow(i + 1);
            //添加数据
            rowTemp.CreateCell(0).SetCellValue(listEmployee[i].EmployeeNumber);
            rowTemp.CreateCell(1).SetCellValue(listEmployee[i].EmployeeName);
            rowTemp.CreateCell(2).SetCellValue(listEmployee[i].Phone);
            rowTemp.CreateCell(3).SetCellValue(listEmployee[i].Cellphone);
            rowTemp.CreateCell(4).SetCellValue(listEmployee[i].Address);
            rowTemp.CreateCell(5).SetCellValue(listEmployee[i].DeoartmentName);
            rowTemp.CreateCell(6).SetCellValue(listEmployee[i].PositionName);
            rowTemp.CreateCell(7).SetCellValue(listEmployee[i].Remark);
        }
        
      //为Excel文件命名,员工信息加日期
      string fileName = "员工信息" + DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss-ffff") + ".xls";
      
      //转化为内存流
      MemoryStream ExcelStream = new MemoryStream();
      
      //将Excel文件写入内存流
      excelBook.Write(ExcelStream);
      
      //输出之前调用Seek(偏移量,游标位置) 移动文件读取指针到指定的位置
      //Seek(0,Seek.begin) 第一个参数表示相对位置,第二个参数表示参照位置
      ExcelStream.Seek(0, SeekOrigin.Begin);
      
      //MIME文件类型(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型
      return File(ExcelStream, "application/vnd.ms-excel", fileName);
 }

把数据导出到excel表格就这样完成了,写代码也不是很难,在写代码前先把思路理清楚,思路清楚了就会发现代码没有想象中的那么难。那么我们看看导出是否成功,先查询一部分数据,不查询就会把数据全部都导出了。
在这里插入图片描述
查出了四条数据,那么我们现在点击导出员工:
在这里插入图片描述
这时会提示用户,是否已经筛选好需要打印的数据,点击确定浏览器就会有个下载的提示:
在这里插入图片描述
下载完成后可以点击打开看看,是否打印出刚刚查询出的那四条数据:

在这里插入图片描述
导出是刚刚那四条数据没问题,多练习几遍就不会觉得难了,一般做第二遍就基本可以理解代码的含义了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值