POI 导出EXCEL 2003 方法记录

本文介绍了一种将学生学习成绩数据导出为Excel文件的方法。该方法使用Java编程语言实现,通过HTTP请求传递学生的成绩信息,并将其转换为Excel格式进行下载。文章详细展示了如何设置Excel的样式、合并单元格以及填充数据。

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


public void excelScoreBill(HttpServletRequest request,HttpServletResponse response){
List<String>subjectname=(List<String>)request.getAttribute("subjectname");

List<ScoreBillBean>list=(List<ScoreBillBean>)request.getAttribute("listbean");
String classname2=(String) request.getAttribute("classname"); 
classname2=StringUtil.convermapnull(classname2);
String filename=classname2+"成绩简表";


response.setCharacterEncoding("UTF-8");
response.setContentType("application/x-download");
List<String>sublist=null;
Workbook book=null;
try {

filename =filename+".xls";
book=new HSSFWorkbook();

String agent = (request.getHeader("USER-AGENT")).toLowerCase();
if(agent.indexOf("msie")>-1){
   filename = java.net.URLEncoder.encode(filename, "UTF-8");
}else{ 
   filename = new String(filename.getBytes("UTF-8"), "ISO8859-1");
}
   response.setContentType("application/msexcel");
   response.setHeader("Content-disposition","attachment;filename=\""+filename+"\"");
if(book!=null){
Sheet sheet=book.createSheet("成绩简表");
sheet.setDefaultRowHeight((short) (20*15));

sheet.setDefaultColumnWidth(8);
sheet.setColumnWidth(0, 20*255);
CellStyle style=book.createCellStyle();
style=getStyle(book);

//学号
CellRangeAddress stunum =new CellRangeAddress(0, 1, 0, 0); // 起始行, 终止行, 起始列, 终止列
//姓名
CellRangeAddress stuname =new CellRangeAddress(0, 1, 1, 1); // 起始行, 终止行, 起始列, 终止列
//班级
CellRangeAddress classname =new CellRangeAddress(0, 1, 2, 2); // 起始行, 终止行, 起始列, 终止列

sheet.addMergedRegion(stunum);
sheet.addMergedRegion(stuname);
sheet.addMergedRegion(classname);
Row row=sheet.createRow(0);
Cell cell_0=row.createCell(0);
cell_0.setCellValue("学号");
cell_0.setCellStyle(style);
Cell cell_1=row.createCell(1);
cell_1.setCellValue("姓名");
cell_1.setCellStyle(style);
Cell cell_2=row.createCell(2);
cell_2.setCellValue("班级");
cell_2.setCellStyle(style);
//绘画科目表头
CellRangeAddress subject=null;
Cell subjectcell=null;
for(int i=0;i<subjectname.size();i++){
subject=new CellRangeAddress(0, 0, i*3+3, (i+1)*3+2);
sheet.addMergedRegion(subject);
subjectcell=row.createCell(i*3+3);
subjectcell.setCellStyle(style);
subjectcell.setCellValue(subjectname.get(i));
}
//绘制总分
subject=new CellRangeAddress(0, 0, subjectname.size()*3+3, (subjectname.size()+1)*3+2);
sheet.addMergedRegion(subject);
subjectcell=row.createCell(subjectname.size()*3+3);
subjectcell.setCellStyle(style);
subjectcell.setCellValue("总分");
//第二行
row=sheet.createRow(1);
for(int i=0;i<subjectname.size()*3+6;i++){
if(i>2){
subjectcell=row.createCell(i);
subjectcell.setCellStyle(style);
if(i%3==0){
subjectcell.setCellValue("分数");
}else if(i%3==1){
subjectcell.setCellValue("班名");
}else if(i%3==2){
subjectcell.setCellValue("校名");
}
}
}
Row r1=sheet.getRow(0);
Cell initcell=null;
for(int i=0;i<(subjectname.size()+2)*3;i++){
if(r1.getCell(i)==null){
initcell=r1.createCell(i);
initcell.setCellStyle(style);
}
}
Row r2=sheet.getRow(1);
for(int i=0;i<(subjectname.size()+2)*3;i++){
if(r2.getCell(i)==null){
initcell=r2.createCell(i);
initcell.setCellStyle(style);
}
}


ScoreBillBean bean=null;
Cell temcell=null;
int cindex=0;
for(int i=0;i<list.size();i++){
cindex=0;
bean=list.get(i);
row=sheet.createRow(i+2);
temcell=row.createCell(cindex);//学号

temcell.setCellStyle(style);
temcell.setCellValue(bean.getStudentnum());
cindex++;

temcell=row.createCell(cindex);//姓名
temcell.setCellStyle(style);
temcell.setCellValue(bean.getStudentname());
cindex++;

temcell=row.createCell(cindex);//班级
temcell.setCellStyle(style);
temcell.setCellValue(bean.getClassname());
cindex++;

for(int x=0;x<subjectname.size();x++){

temcell=row.createCell(cindex);
temcell.setCellStyle(style);
temcell.setCellValue(bean.getList().get(x));
cindex++;

temcell=row.createCell(cindex);
temcell.setCellStyle(style);
temcell.setCellValue(bean.getClassranklist().get(x));
cindex++;

temcell=row.createCell(cindex);
temcell.setCellStyle(style);
temcell.setCellValue(bean.getGraderanklist().get(x));
cindex++;

}
temcell=row.createCell(cindex);
temcell.setCellStyle(style);
temcell.setCellValue(bean.getSumscore());
cindex++;
temcell=row.createCell(cindex);
temcell.setCellStyle(style);
temcell.setCellValue(bean.getClassrank());
cindex++;
temcell=row.createCell(cindex);
temcell.setCellStyle(style);
temcell.setCellValue(bean.getGraderank());
cindex++;

}
/*CellStyle cellstyle=getStyle(book);
for(int i=0;i<list.size();i++){
Row row=sheet.createRow(i);
sublist=list.get(i);
for(int j=0;j<sublist.size();j++){
Cell cell=row.createCell(j);
cell.setCellValue(sublist.get(j));
cell.setCellStyle(cellstyle);
}
}*/
OutputStream out = response.getOutputStream();
book.write(out);
if(out!=null){
out.close(); 
}
if(book!=null){
book.close();
}
}

} catch (Exception e) {
System.out.println("创建excel,workbook失败");
e.printStackTrace();
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值