利用springMVC把报表以excel的形式导出

利用springMVC把报表以excel的形式导出

自定义视图的作用
自己定义视图,视图继承view类或者abstractExcelView或者abstractPdfView,将内容以Excel或者PDF格式显示,还可以玩表格啊什么的。

实现的步骤

1、在pom.xml文件中加入需要的依赖

	
		<dependency>
			<groupId>org.apache.poi</groupId>
			<artifactId>poi</artifactId>
			<version>3.15</version>
		</dependency>
		<dependency>
			<groupId>org.apache.poi</groupId>
			<artifactId>poi-ooxml</artifactId>
			<version>3.15</version>
		</dependency>

2、 配置spring-mvc 的配置文件,配置类名解析来找到自定义视图

	
	<bean id ="beanNameViewResolver" class = "org.springframework.web.servlet.view.BeanNameViewResolver">
	<!-- value中的值时随便写的,只要比默认值小就行,默认值是一个非常大的数 -->
		<property name="order" value="50"></property>
	</bean>

3、代码实现

(1)自己定义一个视图类,继承 AbstractXlsxView


	package cn.bzu.personalmanage.web;
	import java.io.OutputStream;
		import java.util.List;
		import java.util.Map;
		import javax.servlet.http.HttpServletRequest;
		import javax.servlet.http.HttpServletResponse;
		import org.apache.poi.hssf.usermodel.HSSFColorScaleFormatting;
		import org.apache.poi.hssf.util.HSSFColor;
		import org.apache.poi.hssf.util.HSSFColor.RED;
		import org.apache.poi.ss.usermodel.Cell;
		import org.apache.poi.ss.usermodel.CellStyle;
		import org.apache.poi.ss.usermodel.Font;
		import org.apache.poi.ss.usermodel.HorizontalAlignment;
		import org.apache.poi.ss.usermodel.Row;
		import org.apache.poi.ss.usermodel.Sheet;
		import org.apache.poi.ss.usermodel.Workbook;
		import org.springframework.stereotype.Component;
		import org.springframework.stereotype.Repository;
		import org.springframework.web.servlet.view.document.AbstractXlsxView;
		import cn.bzu.personalmanage.entity.Staff;
		@Component("excelView")
		public class ExcelView extends AbstractXlsxView {
			@Override
			protected void buildExcelDocument(Map<String, Object> model, Workbook workbook, HttpServletRequest request,
					HttpServletResponse response) throws Exception {
				// 视图的名字
				String fileName = "UserList.xlsx";
				// 设置响应 的字符编码集
				response.setCharacterEncoding("UTF-8");
				// 设置文件内容的形式
				response.setContentType("aplication/ms-excel");
				// 设置头部信息
				response.setHeader("Content-Disposition", "inline; fileName" + new String(fileName.getBytes(), "UTF-8"));
				// 接受controller中request请求域中的信息
				List<Staff> staffs = (List<Staff>) model.get("staffs");
				// 创建一个excel表
				Sheet sheet = workbook.createSheet("员工的基本信息");
				// 创建第一行
				Row headRow = sheet.createRow(0);
				// 设置第一行各个列的值
				headRow.createCell(0).setCellValue("编号");
				headRow.createCell(1).setCellValue("姓名");
				headRow.createCell(2).setCellValue("年龄");
				headRow.createCell(3).setCellValue("性别");
				headRow.createCell(4).setCellValue("岗位");
				headRow.createCell(5).setCellValue("部门");
				headRow.createCell(6).setCellValue("电话");
				headRow.createCell(7).setCellValue("学历");
				headRow.createCell(8).setCellValue("专业");
				headRow.createCell(9).setCellValue("出勤数");
				headRow.createCell(10).setCellValue("基本工资");
				headRow.createCell(11).setCellValue("奖金");
				headRow.createCell(12).setCellValue("补助");
				headRow.createCell(13).setCellValue("薪水总数");
				headRow.createCell(14).setCellValue("是否在职");
				// 创建单元格样式
				CellStyle cellStyle = workbook.createCellStyle();
				// 左对齐
				cellStyle.setAlignment(HorizontalAlignment.RIGHT);
				int rowNumber = 1;
				// 循环遍历Staffs
				for (Staff staff : staffs) {
					Row row = sheet.createRow(rowNumber);
					// 为excel表中的每一列进行赋值
					row.createCell(0).setCellValue(staff.getId());
					row.createCell(1).setCellValue(staff.getName());
					row.createCell(2).setCellValue(staff.getAge());
					row.createCell(3).setCellValue(staff.getSex());
					row.createCell(4).setCellValue(staff.getStation().getStationName());
					row.createCell(5).setCellValue(staff.getDepartment().getDpname());
					row.createCell(6).setCellValue(staff.getPhone());
					row.createCell(7).setCellValue(staff.getEducation());
					row.createCell(8).setCellValue(staff.getPrefession());
					row.createCell(9).setCellValue(staff.getSalary().getAttendance());
					row.createCell(10).setCellValue(staff.getSalary().getBaseSalary());
					row.createCell(11).setCellValue(staff.getSalary().getBonus());
					row.createCell(12).setCellValue(staff.getSalary().getAllowance());
					row.createCell(13).setCellValue(staff.getSalary().getSum());
					row.createCell(14).setCellValue(staff.getLeaveOffice().getState());
					//对行数自加1
					rowNumber++;
				}
				// 获得输出流中的内容
				OutputStream outputStream = response.getOutputStream();
				// 写入
				workbook.write(outputStream);
				outputStream.flush();
				outputStream.close();
			}

2在控制层完成对代码的调用

	@RequestMapping("/staffs")
	public String getAllStaffs(Model model) {

	//查询到数据库中所有的员工
		List<Staff> staffs = staffService.getList();
	//将员工信息存放的请求域中
		model.addAttribute("staffs", staffs);
	//返回自己定义的视图
		return "excelView";
	}
注::这里对ExcelView做出说明 如果要像下面的样子编写Controller类里的方法,即必须在springmvc.xml文件中配置BeanNameViewResolver解析器,通过类名解析来找到自定义视图,注意两点:①return返回的是视图类名首写字母改小写后的名字;②在视图类上要加@Component,要把视图类的对象放Spring容器里。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值