这段时间正好做了个在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";