开发工具与关键技术: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表格就这样完成了,写代码也不是很难,在写代码前先把思路理清楚,思路清楚了就会发现代码没有想象中的那么难。那么我们看看导出是否成功,先查询一部分数据,不查询就会把数据全部都导出了。 查出了四条数据,那么我们现在点击导出员工: 这时会提示用户,是否已经筛选好需要打印的数据,点击确定浏览器就会有个下载的提示: 下载完成后可以点击打开看看,是否打印出刚刚查询出的那四条数据:
导出是刚刚那四条数据没问题,多练习几遍就不会觉得难了,一般做第二遍就基本可以理解代码的含义了。