关于poi导出excel表的注意事项

本文介绍如何使用SSM框架实现从前端发起请求到后端处理并导出Excel数据的全过程,包括处理中文乱码问题及正确设置响应头。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前端发送请求,不可以用ajax

如果采用ajax,则下载默认会读取response返回的二进制数据,前端不会有执行下载动作,并且reponse的内容是乱码的

需要用表单提交的方式

后台代码:ssm框架

@RequestMapping("/importLessonByClazz")
	public void importLessonByClazz(String className,String beginweeks,String endweeks,HttpServletResponse response){
	//查询数据
		Clazz clazz = clazzService.getClazzById(Integer.parseInt(className));
		ImprotLesson il = new ImprotLesson();
		il.setId(Integer.parseInt(clazz.getClassroomid()));
		il.setBegion(beginweeks);
		il.setEnd(endweeks);
		java.util.List<Lesson> list = lessonService.searchLessonByClassroomId(il);
		java.util.List<Tree> list2 = lessonTypeService.getLessonTypeTree(new LessonType());
		// excel的文档对象
		HSSFWorkbook book = new HSSFWorkbook();
		// excel的表单
		HSSFSheet sheet = book.createSheet();
		int i=0;
		if(list.size()>0){
			//excel的行
			HSSFRow row = sheet.createRow(i++); 
			//利用excel的行对象创建单元格对象并赋值,单元格从0开始
			row.createCell(0,3).setCellValue("班级课程表");
			for (int j = Integer.parseInt(beginweeks); j < Integer.parseInt(endweeks)+1; j++) {//周
				HSSFRow row1 = sheet.createRow(i++); 
				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("第八节课");
				for (int j2 = 0; j2 < 7; j2++) {//天
					HSSFRow row2 = sheet.createRow(i++); 
					row2.createCell(0).setCellValue("周"+(j2+1));
					for (int k = 0; k < 8; k++) {//课
						for (Lesson lesson : list) {
							if(Integer.parseInt(lesson.getWeeks())==j&&Integer.parseInt(lesson.getWeekday())==(j2+1)&&Integer.parseInt(lesson.getTime())==(k+1)){
								for (Tree tree : list2) {
									if(lesson.getName().equals(tree.getId())){
										row2.createCell(k+1).setCellValue(tree.getText());
									}
								}
								break;
							}
						}
					}
				}
			}
		}
			
		
		try {
			response.setContentType("application/vnd.ms-excel");
			//文件名
			String string = new String("班级课程表.xls".getBytes("utf-8"),"ISO8859-1");
			//设置文件在浏览器下载
			response.setHeader("Content-Disposition", "attachment;filename="+string);
			ServletOutputStream out = response.getOutputStream();
			
			book.write(out);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值