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

本文介绍了如何在SSH框架下利用poi库将数据生成Excel文件进行导出,详细讲解了配置pom.xml、Struts.xml以及表格实现代码的过程,包括设置表头、填充数据和调整样式。
摘要由CSDN通过智能技术生成

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

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

excel.poi

poi-commons-jexl

2.1.1

excel.poi

poi-core

3.10

excel.poi

poi-jxls-core

1.0.5

excel.poi

poi-ooxml

3.10

Struts.xml配置

application/vnd.ms-excel

attachment;filename="CurriExcel.xls"

excelFile

表格实现代码

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";

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值