天天看點

對資料進行報表導出

在操作過程中,需要對資料進行統計分析和彙總,導出成excel格式

核心思想:将需要導出的資料以集合的形式查詢出來,并填充到具體的excel表中。進行for循環填充,注意:不要在循環中查資料庫

public void exportReportTeachers(String name,String sex,String username){
		
		Teacher teacher=new Teacher();
		teacher.setName(name);
		teacher.setUsername(username);
		teacher.setSex(sex);
		List<Teacher> teachers = teacherDAO.getConditionList(teacher);
		
		//生成一個xls檔案
		HSSFWorkbook work =new HSSFWorkbook();
		
		HSSFSheet sheet=work.createSheet("教師統計表");
		CellRangeAddress cellRangeAddress=new CellRangeAddress(0, 0, 0,5);
		sheet.addMergedRegion(cellRangeAddress);
		// 設定單元格樣式
		HSSFCellStyle cellStyle1 = work.createCellStyle();// 建立表格樣式
		// 設定字型居中
		cellStyle1.setAlignment(HSSFCellStyle.ALIGN_CENTER);
		// 設定字型
		HSSFFont font1 = work.createFont();
		font1.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);
		font1.setColor(HSSFColor.BLACK.index);
		font1.setFontHeight((short) 250);
		font1.setFontName("宋體");
		font1.setBoldweight((short) 13);
		font1.setColor(HSSFColor.BLACK.index);
		cellStyle1.setFont(font1);

		// 垂直居中
		cellStyle1.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
		cellStyle1.setAlignment(HSSFCellStyle.ALIGN_CENTER);
		// 加邊框
		cellStyle1.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 下邊框
		cellStyle1.setBorderLeft(HSSFCellStyle.BORDER_THIN);// 左邊框
		cellStyle1.setBorderTop(HSSFCellStyle.BORDER_THIN);// 上邊框
		cellStyle1.setBorderRight(HSSFCellStyle.BORDER_THIN);// 右邊框
		HSSFRow headRow = sheet.createRow(0);
		headRow.setHeight((short) (42 * 15.625));
		for (int i = 0; i <= 5; i++) {
			HSSFCell cell = headRow.createCell(i);
			cell.setCellValue("教師統計表");
			cell.setCellStyle(cellStyle1);
		}

		// 設定單元格樣式
		HSSFCellStyle cellStyle = work.createCellStyle();// 建立表格樣式
		// 設定字型
		HSSFFont font = work.createFont();
		font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
		font.setColor(HSSFColor.BLACK.index);
		// font.setFontHeight((short)250);
		font.setFontName("宋體");
		font.setBoldweight((short) 10);
		font.setColor(HSSFColor.BLACK.index);
		cellStyle.setFont(font);
		// 設定背景色
		cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
		cellStyle.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index);
		cellStyle.setAlignment(HSSFCellStyle.VERTICAL_CENTER);
		cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
		// 加邊框
		cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 下邊框
		cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);// 左邊框
		cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);// 上邊框
		cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);// 右邊框
		// 設定垂直居中
		cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
		cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
		HSSFRow row = sheet.createRow(1);

		// 建立單元格
		HSSFCell cell = row.createCell(0);
		cell.setCellValue("序号");
		cell.setCellStyle(cellStyle);
		
		HSSFCell cell1 = row.createCell(1);
		cell1.setCellValue("教師Id");
		cell1.setCellStyle(cellStyle);
		
		HSSFCell cell2 = row.createCell(2);
		cell2.setCellValue("教師姓名");
		cell2.setCellStyle(cellStyle);
		
		HSSFCell cell3 = row.createCell(3);
		cell3.setCellValue("登入使用者名");
		cell3.setCellStyle(cellStyle);
		
		HSSFCell cell4 = row.createCell(4);
		cell4.setCellValue("性别");
		cell4.setCellStyle(cellStyle);
		
		HSSFCell cell5 = row.createCell(5);
		cell5.setCellValue("所任課程");
		cell5.setCellStyle(cellStyle);
		
		// 設定單元格樣式
		HSSFCellStyle valueCellStyle = work.createCellStyle();// 建立表格樣式
		HSSFFont valueFont = work.createFont();
		valueFont.setColor(HSSFColor.BLACK.index);
		valueFont.setFontName("宋體");
		valueCellStyle.setFont(valueFont);
		// 設定自動換行
		// valueCellStyle.setWrapText(true);

		// 垂直居中
		valueCellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
		valueCellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
		// 加邊框
		valueCellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 下邊框
		valueCellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);// 左邊框
		valueCellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);// 上邊框
		valueCellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);// 右邊框

		int rowNum = 2;
		for (int j = 0; j < teachers.size(); j++) {
			// 一個教師對應多門課程
		
			HSSFRow valueRow = sheet.createRow(rowNum);// 前面已經寫兩行了
			
			HSSFCell valueCell = valueRow.createCell(0);
			valueCell.setCellValue(j + 1);// 設定序号
			valueCell.setCellStyle(valueCellStyle);
			
			HSSFCell valueCell1 = valueRow.createCell(1);
			valueCell1.setCellValue(teachers.get(j).getId());// 教師id
			valueCell1.setCellStyle(valueCellStyle);
			
			HSSFCell valueCell2 = valueRow.createCell(2);
			valueCell2.setCellValue(teachers.get(j).getName());// 教師姓名
			valueCell2.setCellStyle(valueCellStyle);
			
			HSSFCell valueCell3 = valueRow.createCell(3);
			valueCell3.setCellValue(teachers.get(j).getUsername());// 教師使用者名
			valueCell3.setCellStyle(valueCellStyle);
			
			HSSFCell valueCell4 = valueRow.createCell(4);
			valueCell4.setCellValue(teachers.get(j).getSexStr());//性别
			valueCell4.setCellStyle(valueCellStyle);
			
			HSSFCell valueCell5 = valueRow.createCell(5);
			valueCell5.setCellValue(teachers.get(j).getCourseNames());//課程名稱
			valueCell5.setCellStyle(valueCellStyle);

			//行号,起始列号 ,行号 ,終止列号			
			rowNum++;
		}
		// =================指定列寬======================
		sheet.setColumnWidth(0, 5 * 256);// 設定列寬
		sheet.setColumnWidth(1, 40 * 256);// 設定列寬
		sheet.setColumnWidth(2, 13 * 256);// 設定列寬
		sheet.setColumnWidth(3, 25 * 256);// 設定列寬
		sheet.setColumnWidth(4, 8 * 256);// 設定列寬
		sheet.setColumnWidth(5, 30 * 256);// 設定列寬
	
		// 設定頁邊距
		sheet.setMargin(HSSFSheet.BottomMargin, 0);
		sheet.setMargin(HSSFSheet.LeftMargin, (double) 0.4);
		sheet.setMargin(HSSFSheet.RightMargin, (double) 0.8);
		sheet.setMargin(HSSFSheet.TopMargin, 0);
		/*
		 * //設定列印為橫闆 HSSFPrintSetup ps = sheet.getPrintSetup(); //true為橫向
		 * false為縱向 ps.setLandscape(true);
		 */
		File dir = new File(AttachmentUtil.getTempDir());
		if (!dir.exists()) {
			dir.mkdirs();
		}
		try {
			String fileName = "教師統計表";
			File file = new File(dir.getAbsolutePath() + "/" + UUID.getUUID());
			OutputStream out = new FileOutputStream(file);
			work.write(out);
			FileUtil.download(file, fileName + ".xls");
		} catch (Exception e) {
			new BusinessException("檔案傳輸出錯");
			e.printStackTrace();
		}
	}