在ssh框架下将数据生成Excel文件导出

这段时间正好做了个在ssh框架下将数据生成Excel文件导出的功能,趁着还记得,赶快把它贴出来

pom.xml配置(Excel需要导的jar包)

<dependency> 
			<groupId>excel.poi</groupId>
			<artifactId>poi-commons-jexl</artifactId>
			<version>2.1.1</version>
		</dependency>
		
		<dependency> 
			<groupId>excel.poi</groupId>
			<artifactId>poi-core</artifactId>
			<version>3.10</version>
		</dependency> 
		
		<dependency> 
			<groupId>excel.poi</groupId>
			<artifactId>poi-jxls-core</artifactId>
			<version>1.0.5</version>
		</dependency> 
		
		<dependency> 
			<groupId>excel.poi</groupId>
			<artifactId>poi-ooxml</artifactId>
			<version>3.10</version>
		</dependency>

Struts.xml配置

<action name="exportToExcel" class="CurriToExcel" method="ExcelExport">
		 	<result name="excel" type="stream"><!-- type="stream 把一般内容输出到流 -->
			    <param name="contentType">application/vnd.ms-excel</param>
			    <!-- 参数contentType的地方指定为application/vnd.ms-excel -->
			    <param name="contentDisposition">attachment;filename="CurriExcel.xls"</param>
			    <!-- 设置为 attachment 将会告诉浏览器下载该文件  filename 指定下载文件保有存时的文件名--> 
			    <param name="inputName">excelFile</param>
			    <!-- 参数inputName指定输入流的名称,而且action里面必须有excelFile这个属性的get方法 -->
			</result>
		 </action>


表格实现代码

HSSFWorkbook workbook = new HSSFWorkbook(); // 创建一个excel
		for (int j = 0; j < classList.size(); j++) {// 循环数据
			ExamineeClass eClass = (ExamineeClass) classList.get(j);
			HSSFCellStyle style = workbook.createCellStyle(); // 设置表头的类型
			style.setAlignment(HSSFCellStyle.ALIGN_CENTER);//内容左右居中
			HSSFCellStyle style1 = workbook.createCellStyle(); // 设置数据类型
			style1.setAlignment(HSSFCellStyle.ALIGN_CENTER);//内容左右居中
			HSSFFont font = workbook.createFont(); // 设置字体
			HSSFSheet sheet = workbook.createSheet(eClass.getClassName()); // 创建一个sheet
			HSSFHeader header = sheet.getHeader();// 设置sheet的头
			HSSFCell cell = null; // Excel的列
			HSSFRow row = null; // Excel的行

			/*
			 * 设置表头:对Excel每列取名 (必须根据你取的数据编写)
			 */
			String[] tableHeader = new String[8];
			tableHeader[0] = eClass.getClassName();//列的第一行命名
			String a[] = startDate.split("-");//把日期年月日分开
			int year = Integer.parseInt(a[0]);
			int month = Integer.parseInt(a[1]);
			int day = Integer.parseInt(a[2]);
			tableHeader[1] = getDate(year, month - 1, day);
			for (int k = 1; k < 7; k++) {//把各个日期命名为列名
				day += 1;
				tableHeader[k + 1] = getDate(year, month - 1, day);
			}

			/*
			 * 下面的都可以拷贝不用编写
			 */
			short cellNumber = (short) tableHeader.length;// 表的列数
			/**
			 * 根据是否取出数据,设置header信息
			 *
			 */
			if (SignList.size() < 1) {
				header.setCenter("查无资料");
			} else {
				header.setCenter("学生课表");
				row = sheet.createRow(0);// 第0行
				row.setHeight((short) 400);//设置行高
				for (int k = 0; k < cellNumber; k++) {
					cell = row.createCell(k);// 创建第0行第k列
					cell.setCellValue(tableHeader[k]);// 设置第0行第k列的值
					sheet.setColumnWidth(k, 6000);// 设置列的宽度
					font.setColor(HSSFFont.COLOR_NORMAL); // 设置单元格字体的颜色.
					font.setFontHeight((short) 350); // 设置单元字体高度
					style1.setFont(font);// 设置字体风格
					cell.setCellStyle(style1);//设置样式
					style.setFillForegroundColor(HSSFColor.ROSE.index);   // 前景色的设定 
					style.setFillPattern(CellStyle.SOLID_FOREGROUND);// 填充模式  
					cell.setCellStyle(style);
				}
				String times[] = { "8:30-10:30", "10:30-12:00", "14:00-15:30", "15:30-17:30", "19:00-20:30",
						"20:30-22:00" };
				for (int h = 0; h < 6; h++) {// 设置第一列
					row = sheet.createRow(h + 1);
					row.setHeight((short) 400);
					cell = row.createCell(0);
					cell.setCellValue(times[h]);// 设置第1列0行
					sheet.setColumnWidth(0, 6000);// 设置列的宽度
					font.setColor(HSSFFont.COLOR_NORMAL); // 设置单元格字体的颜色.
					font.setFontHeight((short) 350); // 设置单元字体高度
					style1.setFont(font);// 设置字体风格
					cell.setCellStyle(style1);
					style.setFillForegroundColor(HSSFColor.ROSE.index);
					style.setFillPattern(CellStyle.SOLID_FOREGROUND);
					cell.setCellStyle(style);
				}
				/*
				 * // 给excel填充数据这里需要编写
				 * 
				 */
				for (int i = 0; i < SignList.size(); i++) {// 循环所有的数据
					TeacherCurriModel sign = (TeacherCurriModel) SignList.get(i);// 获取sign对象
					row = sheet.getRow(0);// 0行

					if (sign.getClassname().equals(row.getCell(0).getStringCellValue())) {
						String date = sign.getDate();
						String tString = sign.getTimeperiods();
						int rownum = 0;
						int cellnum = 0;
						for (int k = 1; k < cellNumber; k++) {// 列
							row = sheet.getRow(0);// 行
							String date1 = row.getCell(k).getStringCellValue();
							if (date1.equals(date)) {
								cellnum = k;// 找到列id
								break;
							}
						}
						for (int c = 1; c < 7; c++) {
							row = sheet.getRow(c);
							String time = row.getCell(0).getStringCellValue();
							if (time.equals(tString)) {
								rownum = c;// 找到行id
								break;
							}
						}
						row = sheet.getRow((short) rownum);
						row.setHeight((short) 400);
						cell = row.createCell(cellnum);
						HSSFCellStyle style2 = workbook.createCellStyle();
						style2.setAlignment(HSSFCellStyle.ALIGN_CENTER);
						style2.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 垂直
						HSSFPalette palette = workbook.getCustomPalette();
						HSSFFont font1 = workbook.createFont(); // 设置字体
						if ("自习".equals(sign.getChapterName())) {
							style2.setFillForegroundColor(HSSFColor.LIGHT_YELLOW.index);//设置前景色
						}
						if ("放假".equals(sign.getChapterName())) {
							font1.setColor(IndexedColors.RED.getIndex());
							style2.setFillForegroundColor(HSSFColor.LEMON_CHIFFON.index);
						}
						if ("测试".equals(sign.getChapterName())) {
							style2.setFillForegroundColor(HSSFColor.GREY_40_PERCENT.index);
						}
						if ("补课".equals(sign.getChapterName())) {
							style2.setFillForegroundColor(HSSFColor.LEMON_CHIFFON.index);
						}if("就业指导".equals(sign.getChapterName())){
							style2.setFillForegroundColor(HSSFColor.LAVENDER.index);
						}
						if (sign.getChapterid() > 0) {
							String bgcolor = sign.getBgcolor();
							short colorNum = 0;
							Iterator keys = map.keySet().iterator();
							while (keys.hasNext()) {
								String key = (String) keys.next();
								if (bgcolor.equals(key)) {
									colorNum = map.get(bgcolor);
									break;
								}
							}
							String color = bgcolor.substring(bgcolor.lastIndexOf("#") + 1); // 此处得到的color为16进制的字符串
							// 转为RGB码
							int r = Integer.parseInt((color.substring(0, 2)), 16); // 转为16进制
							int g = Integer.parseInt((color.substring(2, 4)), 16);
							int b = Integer.parseInt((color.substring(4, 6)), 16);
							// 自定义cell颜色
							// 这里的9是索引用来确定的设置颜色的索引只能是 8 ~ 64,在此之外的索引无效,也不会报错。
							palette.setColorAtIndex(colorNum, (byte) r, (byte) g, (byte) b);
							style2.setFillForegroundColor(colorNum);
						}
						style2.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
						style2.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 下边框
						style2.setBorderLeft(HSSFCellStyle.BORDER_THIN);// 左边框
						style2.setBorderTop(HSSFCellStyle.BORDER_THIN);// 上边框
						style2.setBorderRight(HSSFCellStyle.BORDER_THIN);// 右边框
						font1.setFontHeightInPoints((short) 7);// 设置字体大小
						style2.setFont(font1);
						cell.setCellStyle(style2);// 设置风格
						if ("无".equals(sign.getClassroomname())) {// 赋值
							cell.setCellValue(sign.getChapterName());
						} else {
							cell.setCellValue(sign.getChapterName() + "_" + sign.getClassroomname());
						}
					}

				}
			}
		}

		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		workbook.write(baos);
		excelFile = new ByteArrayInputStream(baos.toByteArray());
		baos.close();
		return "excel";


转载于:https://my.oschina.net/zswlist/blog/1503508

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值