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